2012-01-14 13 views
22

के बाद हर दूसरे तत्व को छोड़ना मेरे पास जावा में ऐसा करने का सामान्य विचार है, लेकिन मैं पाइथन सीख रहा हूं और यह सुनिश्चित नहीं करता कि इसे कैसे किया जाए।पहले

मुझे ऐसे फ़ंक्शन को लागू करने की आवश्यकता है जो सूची के हर दूसरे तत्व वाली सूची को लौटाए, जिसमें पहले तत्व से शुरू होता है।

प्रकार अब तक, मेरे पास है और कैसे यहां से ऐसा करने के लिए के बाद से मैं सिर्फ सीख रहा हूँ कैसे के लिए-छोरों अजगर में अलग हैं यकीन नहीं:

def altElement(a): 
    b = [] 
    for i in a: 
     b.append(a) 

    print b 

उत्तर

34

स्लाइस अंकन a[start_index:end_index:step]

return a[::2] 

जहां start_index0 और end_index पर डिफ़ॉल्ट len(a) पर डिफ़ॉल्ट है।

0

के लिए लूप की तरह आप का उपयोग करना, एक तरह से यह है:

def altElement(a): 
    b = [] 
    j = False 
    for i in a: 
     j = not j 
     if j: 
      b.append(i) 

    print b 

जे सिर्फ 0 और 1 के बीच स्विच जब संलग्न करने के लिए एक तत्व ख को नज़र रखने के लिए रहता है।

+0

क्यों आप बस टॉगल के रूप में एक बूलियन का उपयोग नहीं कर रहे हैं? इसके अलावा, यह अनजाने में unidiomatic है। –

+1

मैंने लेखक के प्रयास को दर्पण करने के लिए इसे इस तरह लिखा था। हाँ, यह बहुत पाइथन नहीं है। निश्चित रूप से, मैं खुशी से संपादित करूँगा और इसे एक बूल बना दूंगा ... – bchurchill

+0

यह एक बहुत ही खराब दृष्टिकोण है क्योंकि आप सूची स्लाइस का उपयोग कर सकते हैं – jdi

1
items = range(10) 
print items 
>>> [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] 
print items[1::2] # every other item after the second; slight variation 
>>> [1, 3, 5, 7, 9] 
] 
5

वैकल्पिक रूप से, तुम कर सकते हो:

for i in range(0, len(a), 2): 
    #do something 

बढ़ाया टुकड़ा अंकन बहुत अधिक संक्षिप्त है, हालांकि।

+0

में इसे करने के बेवकूफ तरीके की ओर इशारा करना बेहतर होगा, यह मेरे लिए सहायक था, लेकिन यह विस्तारित टुकड़ा नोटेशन से अलग है जिसमें यह आपको एक इंडेक्स देता है जिसके साथ आप मूल सरणी में पहुंच सकते हैं , "फ़िल्टर" सरणी प्राप्त करने के बजाय। तो उनके पास अलग-अलग उपयोग के मामले हैं। –

2

वहाँ एक से अधिक तरीकों में एक बिल्ली त्वचा के लिए कर रहे हैं। - सेबा स्मिथ

arr = list(range(10)) # Range from 0-9 

# List comprehension: Range with conditional 
print [arr[index] for index in range(len(arr)) if index % 2 == 0] 

# List comprehension: Range with step 
print [arr[index] for index in range(0, len(arr), 2)] 

# List comprehension: Enumerate with conditional 
print [item for index, item in enumerate(arr) if index % 2 == 0] 

# List filter: Index in range 
print filter(lambda index: index % 2 == 0, range(len(arr))) 

# Extended slice 
print arr[::2] 
संबंधित मुद्दे