2012-08-31 32 views
10

मान लीजिए मैं एक सूची है:एक सूची में (आइटम, अन्य) से अधिक दोहराएं

l = [0, 1, 2, 3] 

मैं कैसे सूची पर पुनरावृति कर सकते हैं, सूची से इसके पूरक के साथ-साथ प्रत्येक आइटम ले रही है? यही कारण है कि

for item, others in ... 
    print(item, others) 

0 [1, 2, 3] 
1 [0, 2, 3] 
2 [0, 1, 3] 
3 [0, 1, 2] 

मुद्रित होगा आदर्श रूप में मैं एक संक्षिप्त अभिव्यक्ति है कि मैं एक समझ में उपयोग कर सकते हैं के लिए देख रहा हूँ, है।

उत्तर

13

यह काफी आसान है और समझा जा सकता है:

for index, item in enumerate(l): 
    others = l[:index] + l[index+1:] 

आप इस के बाहर एक इटरेटर कर सकता है अगर आप जोर देते हैं:

def iter_with_others(l): 
    for index, item in enumerate(l): 
     yield item, l[:index] + l[index+1:] 

यह उपयोग है देते:

for item, others in iter_with_others(l): 
    print(item, others) 
+0

यह अच्छी तरह से काम करता है और वास्तव में क्या करने के लिए कहा ecatmur है, लेकिन लगता है gratuitous सूची निर्माण में एक अभ्यास। यह बड़ी सूचियों के साथ काफी बुरी तरह प्रदर्शन कर सकता है। मुझे आश्चर्य है कि कुछ प्रकार की रैपर ऑब्जेक्ट बनाना बेहतर हो सकता है जो मूल सूची में दृश्य प्रदान करता है। –

+0

@StevenRumbalski: हाँ, लेकिन मैं इसे पाठक के लिए एक अभ्यास के रूप में छोड़ दूंगा जब तक कि कोई बड़ी मांग न हो। – orlp

3

अपने स्वयं के प्रश्न का उत्तर देते हुए,का उपयोग करना संभव हैइस तथ्य का शोषण करते हुए कि परिणाम लेक्सिकोोग्राफिक क्रम में उत्सर्जित होता है:

from itertools import combinations 
zip(l, combinations(reversed(l), len(l) - 1)) 

हालांकि, यह काफी अस्पष्ट है; नाइटक्रैकर का समाधान बहुत पाठक के लिए समझने में आसान है!

2

के बारे में क्या
>>> [(i, [j for j in L if j != i]) for i in L] 
[(0, [1, 2, 3]), (1, [0, 2, 3]), (2, [0, 1, 3]), (3, [0, 1, 2])] 

ठीक है, कि परीक्षण और @ nightcracker के समाधान की एक gazillion है की संभावना अधिक कुशल है, लेकिन हाँ ...

+0

आप सूची की समझ के बजाय जनरेटर अभिव्यक्तियों का उपयोग कर सकते हैं और इस प्रकार अनावश्यक सूचियां बनाने से बचें क्योंकि @StevenRumbalski ने सपना देखा था। –

+0

हां, मैं पूरी अभिव्यक्ति के लिए जनरेटर का उपयोग कर सकता हूं, लेकिन आंतरिक लूप के लिए नहीं: ओपी जेनरेटर नहीं, सूची मुद्रित करना चाहता था .. –

+0

सही, कम से कम उसके उदाहरण में। सवाल यह है कि क्या वह वास्तव में परिणाम के साथ क्या करना चाहता है। लेकिन वह खुद के लिए तय कर सकता है। –

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

  • कोई संबंधित समस्या नहीं^_^