2013-10-10 7 views
40

में एक आइटम को छोड़कर किसी सूची के सभी तत्वों (या सरणी, या जो कुछ भी) को किसी विशेष इंडेक्स के लिए को छोड़कर कोई आसान तरीका है? जैसे,इंडेक्स सभी * पाइथन

  • mylist[3] स्थिति में आइटम वापस आ जाएगी 3

  • milist[~3] को छोड़कर के लिए 3

पूरी सूची वापस आ जाएगी

उत्तर

37

में सोच सकते हैं एक सूची के लिए, आप एक सूची कंप का उपयोग कर सकते हैं। उदाहरण के लिए, 3 तत्व के बिना ba की एक प्रतिलिपि बनाने के लिए:

a = range(10)[::-1]      # [9, 8, 7, 6, 5, 4, 3, 2, 1, 0] 
b = [x for i,x in enumerate(a) if i!=3] # [9, 8, 7, 5, 4, 3, 2, 1, 0] 

यह बहुत सामान्य है, और NumPy सरणी सहित सभी iterables, के साथ प्रयोग किया जा सकता है। यदि आप () के साथ प्रतिस्थापित करते हैं, तो b किसी सूची के बजाय एक पुनरावर्तक होगा।

या आप pop साथ यथा-स्थान ऐसा कर सकता है:

a = np.arange(9, -1, -1)  # a = array([9, 8, 7, 6, 5, 4, 3, 2, 1, 0]) 
b = a[np.arange(len(a))!=3] # b = array([9, 8, 7, 5, 4, 3, 2, 1, 0]) 

, सामान्य रूप में, बहुत हो जाएगा जो:

a = range(10)[::-1]  # a = [9, 8, 7, 6, 5, 4, 3, 2, 1, 0] 
a.pop(3)    # a = [9, 8, 7, 5, 4, 3, 2, 1, 0] 

numpy में आप एक बूलियन अनुक्रमण के साथ ऐसा कर सकता है ऊपर सूचीबद्ध सूची समझ से तेज़।

37
>>> l = range(1,10) 
>>> l 
[1, 2, 3, 4, 5, 6, 7, 8, 9] 
>>> l[:2] 
[1, 2] 
>>> l[3:] 
[4, 5, 6, 7, 8, 9] 
>>> l[:2] + l[3:] 
[1, 2, 4, 5, 6, 7, 8, 9] 
>>> 

भी देखें

Explain Python's slice notation

+1

अच्छा जवाब काम करेगा। आप इसे सरणी के लिए भी इस्तेमाल कर सकते हैं लेकिन आपको 'numpy.concatenate' का उपयोग करने की आवश्यकता होगी। –

+0

कूल जवाब !!!! – kingmakerking

21

आप numpy का उपयोग कर रहे हैं, तो सबसे करीब है, मैं है का एक मुखौटा

>>> import numpy as np 
>>> arr = np.arange(1,10) 
>>> mask = np.ones(arr.shape,dtype=bool) 
>>> mask[5]=0 
>>> arr[mask] 
array([1, 2, 3, 4, 5, 7, 8, 9]) 

कुछ समान itertools का उपयोग कर प्राप्त किया जा सकता का उपयोग किए बिना numpy

>>> from itertools import compress 
>>> arr = range(1,10) 
>>> mask = [1]*len(arr) 
>>> mask[5]=0 
>>> list(compress(arr,mask)) 
[1, 2, 3, 4, 5, 7, 8, 9] 
+1

मैं कुछ np.arange (len (arr)) का उपयोग कर सकता हूं! = 3' मास्क के रूप में, क्योंकि तब इसे रेखांकित किया जा सकता है, उदा। 'arr [~ (np.arange (लेन (एआर)) == 3)] 'या जो भी हो। – DSM

+0

@DSM: कृपया इसे उत्तर के रूप में पोस्ट करें :-)। कोई भी मामला, मैं नम्पी के साथ काफी समझदार नहीं हूं। एक सूची के मामले में, एक सरणी मास्किंग के लिए – Abhijit

+0

+1, मैं स्लाइस के साथ जाना होगा और संपीड़न का उपयोग कर concatenate। –

17

सबसे आसान तरीका मैंने पाया था:

mylist[:x]+mylist[x+1:] 

कि उत्पादन करेगा आपके mylist सूचकांक x पर तत्व के बिना।

+0

मैंने पाया कि यह वास्तव में आइटम x + 1 को हटा देता है, फिर भी उपयोगी है, धन्यवाद –

+1

आपको याद रखना चाहिए कि सूचकांक 0-आधारित है, इसलिए यह ठीक काम करता है। –

+0

आह हाँ, बस इसे पुनः प्रयास किया और यह सही है। +1 –

0

आप सूचकांक पहले से यहाँ नहीं जानते कि एक समारोह है कि एक सूची के लिए

def reverse_index(l, index): 
    try: 
     l.pop(index) 
     return l 
    except IndexError: 
     return False 
संबंधित मुद्दे