Python: Nối mục vào danh sách N lần


91

Đ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 nối một mục vào danh sách N lần, thực hiện điều này một cách hiệu quả:

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

Đối với tôi, dường như cần phải có một phương pháp "tối ưu hóa" cho điều đó, một cái gì đó như:

l.append_multiple(x, 100)

Lanhung?


9
Kết thúc với l.extend([x] * 100)vì nó phù hợp với hoàn cảnh của tôi nhất. Amber nhận được câu trả lời là toàn diện nhất. Cảm ơn!
Toji

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

1
Để 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

Câu trả lời:


132

Đối với các kiểu dữ liệu không thay đổi:

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 tham chiếu và bạn có thể muốn sửa đổi sau này (như danh sách phụ hoặc các phần):

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

(Lý do tại sao phương pháp đầu tiên chỉ là một ý tưởng tốt cho các giá trị hằng số, như int hoặc chuỗi, là bởi vì chỉ một bản sao nông được thực hiện khi sử dụng <list>*<number>cú pháp và do đó nếu bạn đã làm điều gì đó giống như vậy [{}]*100, bạn sẽ có 100 tham chiếu vào cùng một từ điển - vì vậy việc thay đổi một trong số chúng sẽ thay đổi tất cả. Vì int và string là bất biến 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 extend()phương pháp của danh sách đó (kết hợp với việc tạo danh sách những thứ 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
Hoặc kết hợp cả hai gợi ý vào hình thức a.extend(b*n)nlà những lần bạn muốn lặp lại các yếu tố trong b
DarkCygnus

26

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

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

Xem tài liệu Python để biết thêm thông tin.


6

Tôi đã phải đi một con đường khác cho một nhiệm vụ nhưng đây là những gì tôi đã kết thúc.

my_array += ([x] * repeated_times)

5

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

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

3

Bạn có thể làm điều này bằng cách hiểu danh sách

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

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.