Python: cách ngắn nhất để xen kẽ các mục từ hai danh sách


9

Tôi đang cố gắng đi con đường ngắn nhất (nhân vật có thể) để có được Danh sách 3.

Danh sách 1 và Danh sách 2 đã được trao cho tôi dưới dạng đối số và có cùng độ dài.

l1 = [1, 2, 3, 4, 5]
l2 = ['a', 'b', 'c', 'd', 'e']

Và Danh sách 3 sẽ giống như (vâng, nó cần phải là một danh sách):

l3 = ['a', 1, 'b', 2, 'c', 3, 'd', 4, 'e', 5]

2
Được mục tiêu của bạn để theo nghĩa đen đầu ra danh sách cụ thể l3 = ['a', 1, 'b', 2, 'c', 3, 'd', 4, 'e', 5]cho l1 = [1, 2, 3, 4, 5]l2 = ['a', 'b', 'c', 'd', 'e']đã được giao, hoặc là ý tưởng mà l1l2có thể là bất kỳ hai danh sách của chiều dài giống nhau không?
xnor

Câu trả lời:


13

Zip và Sum

[*sum(zip(l2,l1),())]

Hãy thử trực tuyến!

Kéo hai danh sách lại với nhau sau đó thêm tất cả các bộ dữ liệu để tạo một danh sách kết hợp. Các zip chỉ hoạt động nếu các danh sách được đảm bảo có cùng kích thước, nếu không, nó cắt ngắn danh sách dài hơn.

Đã thêm xung quanh [* ]để chuyển đổi nó thành một danh sách như FryAmTheEggman gợi ý.


2
Nếu sử dụng Python 2, bạn chỉ có thể sử dụng listthay vì [* (...) ]cho +3 byte.
Erik the Outgolfer

6

Phân công lát

c=a*2
c[1::2]=a
c[::2]=b

Đây là ba byte dài hơn so với sử dụng giải pháp Jo King c=[*sum(zip(b,a),())], nhưng nó tiện lợi. Nó có thể ngắn hơn theo tình huống (mặc dù tôi không thể nghĩ về nơi nào).

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.