2011-01-27 42 views
17

Tôi chắc chắn có một cách dễ dàng và rõ ràng để làm điều này, nhưng tôi đã googling và đọc các tài liệu và tôi chỉ không thể tìm thấy bất cứ điều gì.lặp qua 2 danh sách, lặp lại ngắn nhất cho đến khi kết thúc dài nhất

Đây là những gì tôi muốn đạt được:

la = ['a1','a2','a3','a4'] 
lb = ['b1','b2'] 
result = ['a1_b1','a2_b2','a3_b1','a4_b2'] 

Tôi có một danh sách các ngày và một số trong số họ đã một cái gì đó đánh dấu vào chúng. Sau đó tôi có một danh sách ngày càng lớn và tôi muốn đặt danh sách nhỏ nhất trong danh sách lớn hơn nhiều lần nhất có thể. Nó có lẽ sẽ yêu cầu một số loại vòng lặp như tôi cần truy cập vào những ngày trong danh sách lớn hơn cho kết quả cuối cùng.

Vì một lý do nào đó, tôi không thể thấy cách tốt để thực hiện việc này.

Trả lời

9

Hãy thử

result = ["_".join((i, j)) for i, j in itertools.izip(la, itertools.cycle(lb))] 
+1

Bạn có chạy ứng dụng này không? Không phải những gì mà OP yêu cầu. –

+1

@Daniel: Xin lỗi vì đã đăng mã chưa được kiểm tra. Đã sửa ngay. –

18

Giả sử la dài hơn lb:

>>> import itertools 
>>> [x+'_'+y for x,y in zip(la, itertools.cycle(lb))] 
['a1_b1', 'a2_b2', 'a3_b1', 'a4_b2'] 
  • itertools.cycle(lb) trả về một iterator cyclic cho các yếu tố trong lb.

  • zip(...) trả về danh sách các bộ dữ liệu trong đó mỗi phần tử tương ứng với một phần tử trong la cùng với phần tử khớp trong trình lặp.

Các vấn đề liên quan