Cú pháp để chèn một danh sách vào danh sách khác trong python là gì?


197

Đưa ra hai danh sách:

x = [1,2,3]
y = [4,5,6]

Cú pháp để:

  1. Chèn xvào ynhư vậy ybây giờ trông như thế [1, 2, 3, [4, 5, 6]]nào?
  2. Chèn tất cả các mục xvào ynhư vậy ybây giờ trông như thế [1, 2, 3, 4, 5, 6]nào?

danh sách ngượcB, từ đó [listA.insert (pos, x) cho x trong [listB]]
John Mee

xem thêm bài đăng này: stackoverflow.com/questions/5805892/
Ấn

1
@JohnMee Ý bạn là listA.insert(pos, x) for x in listB[::-1]sao?
wizzwizz4

Câu trả lời:


360

Ý bạn là appendsao

>>> x = [1,2,3]
>>> y = [4,5,6]
>>> x.append(y)
>>> x
[1, 2, 3, [4, 5, 6]]

Hay hợp nhất?

>>> x = [1,2,3]
>>> y = [4,5,6]
>>> x + y
[1, 2, 3, 4, 5, 6]
>>> x.extend(y)
>>> x
[1, 2, 3, 4, 5, 6] 

3
Đó là tại chỗ hoặc mang lại một ví dụ mới?
Daniel Möller

7
x.extend(y)đang ở vị trí, x+yđang trở lại danh sách mới. Và x += y, không được đề cập ở đây, tương tự như phần mở rộng.
wim

85

Câu hỏi không làm rõ chính xác những gì bạn muốn đạt được.

Danh sách có appendphương thức, nối thêm đối số của nó vào danh sách:

>>> list_one = [1,2,3]
>>> list_two = [4,5,6]
>>> list_one.append(list_two)
>>> list_one
[1, 2, 3, [4, 5, 6]]

Ngoài ra còn có extendphương thức nối thêm các mục từ danh sách bạn chuyển qua làm đối số:

>>> list_one = [1,2,3]
>>> list_two = [4,5,6]
>>> list_one.extend(list_two)
>>> list_one
[1, 2, 3, 4, 5, 6]

Và tất nhiên, có insertphương thức hoạt động tương tự appendnhưng cho phép bạn chỉ định điểm chèn:

>>> list_one.insert(2, list_two)
>>> list_one
[1, 2, [4, 5, 6], 3, 4, 5, 6]

Để mở rộng danh sách tại một điểm chèn cụ thể, bạn có thể sử dụng cắt danh sách (cảm ơn, @florisla):

>>> l = [1, 2, 3, 4, 5]
>>> l[2:2] = ['a', 'b', 'c']
>>> l
[1, 2, 'a', 'b', 'c', 3, 4, 5]

Cắt danh sách khá linh hoạt vì nó cho phép thay thế một loạt các mục trong danh sách bằng một loạt các mục từ danh sách khác:

>>> l = [1, 2, 3, 4, 5]
>>> l[2:4] = ['a', 'b', 'c'][1:3]
>>> l
[1, 2, 'b', 'c', 5]

34
Nếu bạn muốn 'mở rộng' đến một điểm chèn cụ thể, bạn có thể sử dụng cú pháp cắt danh sách (xem stackoverflow.com/a/7376026/1075152 )
florisla

5
Nhận xét của @ florisla nên là câu trả lời được chấp nhận. Đó là cách duy nhất để chèn một danh sách vào một danh sách khác tại một vị trí tùy ý (không chỉ ở cuối).
thợ dệt

1
@weaver Mặc dù đó là giải pháp duy nhất để làm điều đó (mở rộng ở một chỉ mục cụ thể), đó không phải là câu hỏi ban đầu.
florisla

@florisla Đó là nghề giáo.
thợ dệt


3

Bạn cũng có thể làm ...

x += y

Đây phải là một nhận xét về câu trả lời được chấp nhận, bởi vì người ta đề cập x + yx += ychỉ là điều tương tự nhưng tại chỗ.
HTNW

Tôi không có danh tiếng để làm điều đó, nhưng nếu người khác có thể!
user3707850

2

Nếu bạn muốn thêm các phần tử trong danh sách (list2) vào cuối danh sách khác (danh sách), thì bạn có thể sử dụng phương thức mở rộng danh sách

list = [1, 2, 3]
list2 = [4, 5, 6]
list.extend(list2)
print list
[1, 2, 3, 4, 5, 6]

Hoặc nếu bạn muốn nối hai danh sách thì bạn có thể sử dụng dấu +

list3 = list + list2
print list3
[1, 2, 3, 4, 5, 6]

0

Nếu chúng ta chỉ làm x.append(y), y sẽ được tham chiếu vào x sao cho mọi thay đổi được thực hiện cho y cũng sẽ ảnh hưởng đến x được nối thêm. Vì vậy, nếu chúng ta chỉ cần chèn các phần tử, chúng ta nên làm như sau:

x = [1,2,3] y = [4,5,6] x.append(y[:])

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.