Kết hợp danh sách các chuỗi mục khôn ngoan trong Python


13

Đây là một câu hỏi để chơi golf trong .

Giả sử bạn có hai danh sách các chuỗi và bạn muốn nối các mục tương ứng từ mỗi danh sách. Ví dụ với a=list("abcd")b=list("1234"), tính toán ["a1","b2","c3","d4"].

Điều này là tầm thường trong các ngôn ngữ lập trình dựa trên mảng, trong đó các hoạt động thường áp dụng theo từng thành viên cho các danh sách. Ví dụ, trong ngôn ngữ chơi gôn Pip của tôi , mã đơn giản a.b. Nhưng trong Python, nó không dễ dàng như vậy.

Cách Pythonic có lẽ là sử dụng zipvà hiểu danh sách (25 ký tự):

[x+y for x,y in zip(a,b)]

Một phương pháp khác là mapvới hàm lambda (23):

map(lambda x,y:x+y,a,b)

Sau đây là đoạn ngắn nhất tôi nghĩ ra (21):

map("".join,zip(a,b))

Có phương pháp nào ngắn hơn không?

Giả sử rằng các danh sách có cùng độ dài và một số loại lặp là tất cả những gì cần thiết (vì vậy một mapđối tượng là tốt trong Python 3).


có thể trùng lặp các Mẹo để chơi gôn trong Python
Mast

@Mast Danh sách mẹo có chứa câu trả lời giải quyết câu hỏi cụ thể này không?
Martin Ender

@ MartinBüttner Nếu không, nó nên. Ngăn chặn sự lộn xộn và giữ tất cả các mánh khóe cùng nhau, v.v.
Mast

Câu trả lời:


14

20 ký tự

map(str.__add__,a,b)

Sử dụng phương thức bổ sung chuỗi phương thức tích __add__hợp được gọi bởi các +chuỗi thay cho hàm ẩn danh của bạn lambda x,y:x+y.


Bạn biết đấy, tôi đã nghĩ đến str.__add__nhưng vì một số lý do đã không kiểm tra xem nó có ngắn hơn không.
DLosc

1
@DLosc lợi thế thực sự của câu trả lời này là sử dụng mapvới nhiều lần lặp, giúp tự động ngắt. Nếu không có nó sẽ không ngắn hơn. Lưu ý rằng nếu trong mã của bạn, bạn phải truy cập một số __*__phương thức thì có thể ngắn hơn để thực hiện from operator import *và sau đó sử dụng map(add,a,b).
Bakuriu
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.