2011-01-27 8 views
17

के अंत तक सबसे छोटा दोहराएं मुझे यकीन है कि ऐसा करने का एक आसान और स्पष्ट तरीका है, लेकिन मैं दस्तावेज़ों को गुगल रहा हूं और पढ़ रहा हूं और मुझे कुछ भी नहीं मिला है।2 सूचियों से अधिक लूप, सबसे लंबे समय तक

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

मैं तारीखों की एक सूची है और उनमें से कुछ कुछ उन पर चिह्नित किया गया है:

यह मैं क्या हासिल करना चाहते है। मैं तो दिनांकों की एक बहुत बड़ी सूची है और मैं बड़ा सूची के अंदर संभव के रूप में सबसे छोटी सूची डाल करने के लिए रूप में कई बार चाहते हैं। यह शायद पाश के कुछ प्रकार की आवश्यकता होती है के रूप में मैं अंतिम परिणाम के लिए बड़ा सूची में दिनांक के लिए उपयोग की आवश्यकता होगी।

किसी कारण से मैं सिर्फ यह करने के लिए एक अच्छा तरीका नहीं देख सकता।

उत्तर

9

lb से अधिक समय

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

क्या आपने इसे चलाया? नहीं हैं कि क्या ओ पी बिल्कुल के लिए कहा। –

+1

@Daniel: अपरीक्षित कोड पोस्ट करने के लिए क्षमा करें। अभी सुधार हुआ –

18

मान लिया जाये कि la है का प्रयास करें:

>>> import itertools 
>>> [x+'_'+y for x,y in zip(la, itertools.cycle(lb))] 
['a1_b1', 'a2_b2', 'a3_b1', 'a4_b2'] 
  • itertools.cycle(lb)lb में तत्वों के लिए एक चक्रीय iterator देता है।

  • zip(...) ट्यूपल्स की एक सूची देता है जिसमें प्रत्येक तत्व la में तत्व के अनुरूप होता है जो इटरेटर में मिलान तत्व के साथ मिलकर होता है।

संबंधित मुद्दे