2010-10-13 15 views
12

मैं इस सूची समझ है:दोहराए जाने तत्वों

[[x,x] for x in range(3)] 

जो इस सूची में जो परिणाम:

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

क्या है:

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

लेकिन इस सूची है कि मैं क्या चाहता हूँ इस सूची को उत्पन्न करने के लिए सबसे आसान तरीका है?

उत्तर

10
[y for x in range(3) for y in [x, x]] 
+3

एक लिख सकता है एक यह generatlize करना चाहता है '[x] * 2' के बजाय' [x, x] '। – phimuemue

+0

@phimuemue: जो धीमा – SilentGhost

2
>>> [int(x/2) for x in range(6)] 
[0, 0, 1, 1, 2, 2] 
+0

हो सकता है शायद 'x // 2' के साथ पूर्णांक विभाजन ऑपरेटर का उपयोग' int (x/2) 'से बेहतर होगा? पायथन 2.7 में, 'टाइमिट' '//' को दो गुना से थोड़ा अधिक होने के लिए दिखाता है, पाइथन 3.1 में, लगभग तीन बार, बड़ी श्रेणियों के लिए। – gotgenes

0

आप इस के साथ भाग मिल सकता है:

[floor(x/2) for x in range(6)] 

edit1

[int(x/2) for x in range(6)] 

ही नस में अधिक पोर्टेबल समाधान है। हालांकि अन्य प्रस्तुत उत्तरों बेहतर लगते हैं।

+0

'math.floor()' 'float' देता है, इसलिए यह बिल्कुल समान नहीं है। py3k में –

+0

रिटर्न पूर्णांक, हालांकि – SilentGhost

4

एक सामान्य समाधान;

m = 3 #the list of integers 
n = 2 # of repetitions 
[x for x in range(m) for y in range(n)] 
0
[x/2 for x in range(6)] 

अद्यतन:

[x//2 for x in range(6)] #ok now ? 
+0

सिर्फ अजगर 2.x के लिए ... – Ant

+0

यीप कि सही :) – mouad

+0

@Ant: परिवर्तन वाक्य रचना py3k को तुच्छ है। हालांकि, उसी समाधान को नेड – SilentGhost

1

मेरे समाधान:

def explode_list(p,n): 
    arr=[] 
    track=0 

    if n==0: 
     return arr  
    while track<len(p): 
     m=1 
     while m<=n: 
      arr.append(p[track]) 
      m=m+1 
     track=track+1 

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