2011-01-11 43 views
40

Điều này có vẻ giống như một cái gì đó Python sẽ có một phím tắt cho. Tôi muốn thêm một mục vào một danh sách N lần, làm hiệu quả này:Python: Nối mục vào danh sách N lần

l = [] 
x = 0 
for i in range(100): 
    l.append(x) 

Có vẻ như với tôi rằng có phải là một phương pháp "tối ưu hóa" cho rằng, một cái gì đó như:

l.append_multiple(x, 100) 

Lanhung?

+3

Đã kết thúc bằng 'l.extend ([x] * 100)' vì nó phù hợp với tình huống của tôi nhất. Amber nhận được câu trả lời tín dụng cho là toàn diện nhất. Cảm ơn! – Toji

+4

Đảm bảo bạn hiểu ngữ nghĩa tham chiếu của Python trước khi sử dụng cho bất kỳ điều gì không tầm thường. Các x được nối vào l là tất cả cùng một x, do đó, đột biến một trong số họ ảnh hưởng đến tất cả chúng (tất cả một trong số họ, được gọi là 100 lần). –

+0

Để làm rõ: Tôi đang sử dụng nó cho số nguyên, vì vậy việc sử dụng của tôi là an toàn. – Toji

Trả lời

59

Đối với các kiểu dữ liệu bất biến:

l = [0] * 100 
# [0, 0, 0, 0, 0, ...] 

l = ['foo'] * 100 
# ['foo', 'foo', 'foo', 'foo', ...] 

Đối với các giá trị được lưu trữ bằng cách tham khảo và bạn có thể muốn thay đổi sau đó (như tiểu danh sách hoặc dicts):

l = [{} for x in range(100)] 

(Lý do tại sao phương pháp đầu tiên chỉ là ý tưởng tốt cho các giá trị không đổi, e ints hoặc strings, là bởi vì chỉ có một bản sao nông là khi sử dụng cú pháp <list>*<number>, và do đó nếu bạn đã làm một cái gì đó như [{}]*100, bạn sẽ kết thúc với 100 tham chiếu đến cùng một từ điển - vì vậy thay đổi một trong số họ sẽ thay đổi tất cả . Vì ints và strings không thay đổi nên đây không phải là vấn đề đối với chúng.)

Nếu bạn muốn thêm vào danh sách hiện có, bạn có thể sử dụng phương pháp extend() của danh sách đó (kết hợp với danh sách những điều cần thêm thông qua các kỹ thuật trên):

a = [1,2,3] 
b = [4,5,6] 
a.extend(b) 
# a is now [1,2,3,4,5,6] 
+1

@smihael er, phải không? http://ideone.com/SffARE – Amber

+0

Hoặc kết hợp cả hai đề xuất vào dạng 'a.extend (b * n)' trong đó 'n' là số lần bạn muốn lặp lại các phần tử trong b – DarkCygnus

3

Bạn có thể làm điều này với một danh sách hiểu

l = [x for i in range(10)]; 
15

Sử dụng mở rộng để thêm danh sách hiểu vào cuối.

l.extend([x for i in range(100)]) 

Xem Python docs để biết thêm thông tin.

4

Lặp lại Itertools kết hợp với mở rộng danh sách.

from itertools import repeat 
l = [] 
l.extend(repeat(x, 100)) 
1

Tôi phải đi một tuyến đường khác để chuyển nhượng nhưng đây là những gì tôi đã kết thúc.

my_array += ([x] * repeated_times) 
Các vấn đề liên quan