2012-10-09 10 views
11

मैंकैसे निर्धारित किया जाए यदि 2 आयामी सूची में कोई मान है?

mylist = [('value1', 'value2', 'value3'), ('secval1', 'secval2', 'secval3')] 

कैसे मैं देख पा रहे हैं, तो सूची 'मान 2' में शामिल है निम्नलिखित की तरह एक सूची है?

+0

आप 2 आयामी सूची के भीतर मूल्य के सूचकांक को देखने के लिए चाहते हैं, तो मैं इस सवाल का जवाब प्रयोग किया है: https://stackoverflow.com/a/6518412/1799272 – Oli4

उत्तर

20

उपयोग any() सबूत है कि यहजैसे शॉर्ट सर्किट:

>>> it=chain(*mylist) 
>>> 'value2' in it 
True 
>>> list(it) #part of iterable still not traversed 
['value3', 'secval1', 'secval2', 'secval3'] 
+0

धन्यवाद, मैं कर रहा हूँ उत्सुक है कि मेल खाने वाली वस्तु को पाने का कोई तरीका है? – Tommyka

+1

उस आइटम को प्राप्त करने के लिए जिसमें आप जिस मूल्य को ढूंढ रहे हैं, उसे नियमित रूप से 'लूप' का उपयोग करना चाहिए और सूची में 'value2' मौजूद होने पर वापसी या ब्रेक करना चाहिए। यदि आप सभी मिलान करने वाली वस्तुओं को ढूंढना चाहते हैं, तो आप '[sublist में' value2 'अगर mylist में sublist के लिए sublist का उपयोग कर सकते हैं' '। –

7

आप बस any के साथ सभी उप-सूचियों की जांच कर सकते हैं: एक समाधान है कि भी शॉर्ट सर्किट का समर्थन करता है

any('value2' in sublist for sublist in mylist) 
0

समान any() को,:

>>> from itertools import chain 
>>> mylist = [('value1', 'value2', 'value3'), ('secval1', 'secval2', 'secval3')] 
>>> 'value2' in chain(*mylist) 
True 

any('value2' in subl for subl in mylist) 
+0

'कोई भी' पहले ही शॉर्ट सर्किटिंग करता है। '__nonzero__' को परिभाषित करने वाली कक्षा बनाने के द्वारा इसका परीक्षण करें, वहां' प्रिंट 'कथन डालें, और इसे' किसी भी 'के तर्क में दूसरे मान के रूप में उपयोग करें (जब पहला' सत्य 'है)। 'प्रिंट 'कथन निष्पादित नहीं किया जाएगा। –

+0

@poorsod मुझे पता है, यही कारण है कि मैंने कहा "" किसी भी() "' के समान। :) –

+0

ओह, मुझे गलत समझा - सोचा था कि आप 'किसी भी' के प्रतिस्थापन का सुझाव दे रहे थे जो शॉर्ट सर्किटिंग का उपयोग करता है। –

2
'value2' in (item for sublist in mylist for item in sublist)