Tôi được cung cấp một danh sách l
và tôi muốn thực hiện nhiệm vụ:
l[index] = val
Nhưng có thể có một trường hợp khi danh sách quá nhỏ.
Vì vậy, tôi muốn đảm bảo rằng tôi có không gian cho giá trị mới. Đôi khi tôi cần phải lấp đầy không gian mới với chuỗi rỗng ''
, và đôi khi với các đối tượng khác (như danh sách rỗng []
, False
hoặc None
).
Đối với tác vụ này, tôi sử dụng quy trình sau:
def ResizeList(l, size, fill_with=None):
l += [fill_with]*(size-len(l))
(lưu ý: nó hoạt động ngay cả khi size-len(l)<=0
) (lưu ý: vì tôi quan tâm đến việc đặt trước không gian , tôi cố ý KHÔNG cắt ngắn nó thành một danh sách ngắn hơn)
Như vậy:
ResizeList(l, index+1)
l[index] = val
(Khi điền vào đối tượng khác, nó giống như ResizeList(l, index+1, [])
:)
Có nhiều cách khác để làm điều đó không? Có một số chức năng tích hợp hoặc thư viện để thực hiện việc này không?
Tôi chủ yếu sử dụng Python-3.x, nhưng bí quyết về Python-2x rất hữu ích và được hoan nghênh.
Làm rõ: Xin vui lòng, không cho tôi biết về dict
, vì tôi cầnlist
Đối với những người muốn tôi nói cụ thể hơn:
Câu lệnh vấn đề nói rằng đó là về list
loại. Sử dụng dict
ở đây không phải là một lựa chọn hay giải pháp. Có những lý do cho điều đó, đặc biệt liên quan đến miền (tôi đang làm một nguyên mẫu của một thử nghiệm phải cho thấy một số hành vi tiệm cận, không phải - như bạn đã quen - một nguyên mẫu của một chương trình. Nếu nó sẽ là "chỉ một nguyên mẫu của một chương trình ", sau đó tôi đồng ý với việc sử dụng một dict và các nhận xét khác). Tôi có các giả định sau:
- Tôi có nhiều danh sách (cần quan tâm đến chi phí bộ nhớ và hiệu suất)
- do quy trình làm việc và nhu cầu về nguyên mẫu, tôi không thể gọi tiện ích mở rộng C / C ++ được mã hóa bằng tay
- trong quá trình tính toán, kích thước danh sách cuối cùng là không xác định
- chúng tôi biết rằng trong và danh sách sẽ dày đặc
- các ô danh sách được ghi và ghi đè theo một thứ tự không xác định
Đó chỉ là một vài lý do tại sao tôi nhấn mạnh rằng tôi cần một list
chứ không phải một dict
. Đối với những người quan tâm đến thêm chi tiết hoặc những người muốn thảo luận về dict
, hãy xem cách chúng tôi thảo luận trong phần bình luận TẠI ĐÂY