2016-02-14 7 views
13

मुझे लगता है कि पूरी तरह से वाकिफ हूँ ..मैं पाइथन में लूप के बिना नेस्टेड सूची (सूची की सूची) में एक सूची कैसे खोजूं?

sample=[[1,[1,0]],[1,1]] 
[1,[1,0]] in sample 

यह सच है वापस आ जाएगी।

लेकिन मैं यहां क्या करना चाहता हूं यह है।

sample=[[1,[1,0]],[1,1]] 
[1,0] in sample 

मैं वापसी को सच होना चाहता हूं, लेकिन यह गलत है। मैं यह कर सकता:

sample=[[1,[1,0]],[1,1]] 
for i in range(len(sample)): 
    [1,0] in sample[i] 

लेकिन अगर वहाँ किसी भी बेहतर या कुशल यह कर के रास्ते मैं सोच रहा हूँ।

+0

आप 'सूचकांक ELEM के लिए गणना में (नमूना) का उपयोग कर सकते हैं: [1, 0]' सीमा पर elem' में (लेन()) '--unrelated, बस क्लीनर – cat

उत्तर

6

आप और सूचियों विलय करने के लिए itertools से श्रृंखला का उपयोग कर सकते तो लौट आए सूची में खोज करते हैं।

>>> sample=[[1,[1,0]],[1,1]] 
>>> from itertools import chain 
>>> print [1,0] in chain(*sample) 
True 
+0

यह विफल होगा हालांकि प्रारंभिक सूची का कोई भी तत्व पुनरावर्तनीय नहीं है। – schwobaseggl

+2

प्रश्न सूची की सूची कहता है। यदि आप एक मनमानी संरचना में सूचियां खोजना चाहते हैं तो यह पार्सिंग क्षेत्र में प्रवेश करेगा। जहां पैटर्न मिलान या आगंतुक शायद लागू होंगे। (ध्यान दें कि दोनों ज्ञात संरचनाओं के एक सेट के ट्रैवर्सल की आवश्यकता होगी)। – Alex

1

मुझे नहीं पता कि यह पूरी तरह से लूप के बिना कैसे हल करें। लेकिन पायथन में आपको कभी भी for i in range(len(sample)) लिखना नहीं चाहिए।

तो अपने प्रश्न का उत्तर: हाँ वहाँ एक बेहतर और तेज तरीका है कि आप पाश अपनी सूची for i in sample

तरह से अजगर छोरों संभालती है वास्तव में तेजी से होता है और entriey का एक बहुत साथ बहुत अच्छी तरह भी काम करता है (और अधिक कर सकता है 50.000 से अधिक)।

1

आप अपने sample सूची flatten सकते हैं और फिर खोज में उस सूची चपटा:

> sample = [[1, [1, 0]], [1, 1]] 
> [1, 0] in [item for sublist in sample for item in sublist] 
> True 
+0

लेकिन फिर' [1, 1] 'असफल हो जाएगा क्योंकि यह '1,1' तक चलेगा। – Maroun

+0

@MarounMaroun हां, यह '1,1' नहीं मिलेगा लेकिन प्रश्न में दिए गए लूप के लिए" काम करने वाला "यह नहीं मिलेगा, इसलिए मैंने सोचा कि यह इस तरह से होना चाहिए। – bastelflp

+0

सूची को फ़्लैट करें सभी मुद्दों को संभालने में सक्षम नहीं हो सकता है – Eric

4

एक पुनरावर्ती समाधान जो मनमाने ढंग से (अधिकतम रिकर्सन गहराई को गहरा घोंसला) के लिए काम करेगा। यह भी काम करता है अगर बाहरीतम सूची के किसी भी तत्व खुद को पुनरावृत्त नहीं कर रहे हैं।

from functools import partial 

def contains_nested(some_iterable, elmnt): 
    try: 
     if elmnt in some_iterable: 
      return True 
    except TypeError: # some_iterable is not iterable 
     return False 
    else: 
     return any(map(partial(contains_nested, elmnt=elmnt), some_iterable)) 
संबंधित मुद्दे