पायथन - 2 मानों के बीच संख्याओं के साथ सूची बनाएं?


355

मैं उन दो मूल्यों के बीच एक सूची कैसे बनाऊंगा, जिन्हें मैं डालता हूं? उदाहरण के लिए, निम्न सूची 11 से 16 के मानों के लिए बनाई गई है:

list = [11, 12, 13, 14, 15, 16]

जवाबों:


643

का उपयोग करें range। पायथन 2.x में यह एक सूची देता है, जिसकी आपको आवश्यकता है:

>>> range(11, 17)
[11, 12, 13, 14, 15, 16]

पायथन 3.x rangeमें एक पुनरावृत्त है। तो, आपको इसे सूची में बदलने की आवश्यकता है:

>>> list(range(11, 17))
[11, 12, 13, 14, 15, 16]

नोट : दूसरा नंबर अनन्य है। तो, यहाँ यह होना चाहिए 16+1=17

संपादित करें:

द्वारा वेतन वृद्धि के बारे में पूछे गए सवाल का जवाब देने के लिए 0.5, सबसे आसान विकल्प शायद खसखस का उपयोग करना होगा arange()और .tolist():

>>> import numpy as np
>>> np.arange(11, 17, 0.5).tolist()

[11.0, 11.5, 12.0, 12.5, 13.0, 13.5,
 14.0, 14.5, 15.0, 15.5, 16.0, 16.5]

1
बहुत बढ़िया! ठीक वही जो मेरे द्वारा खोजा जा रहा था! क्या केवल १ की तुलना में ०.५ जैसे छोटे मूल्यों द्वारा वेतन वृद्धि का कोई तरीका है? इसलिए [११.०, ११.५, १२.० ...... १६.०]
लॉर्ड १६'१३

2
@lorde आप तीसरे stepपैरामीटर के साथ 1 से अधिक की वृद्धि कर सकते हैं, लेकिन यह अभी भी एक इंट - फ्लोट नहीं है। आप बिल्कुल ऐसा नहीं कर सकते मानक मान में।
जारेड

@Jared मैं कुछ अंतराल के बाद कुछ मान गिराकर एक सूची बना सकता हूं। जैसे [

2
पायथन 2.x और 3.x के बारे में बताने के लिए अच्छा है।
सिगुर

यदि आप ऐसी परिस्थितियों में काम कर रहे हैं जहां सुन्न अवांछित है, तो विचार करें (जहां x = 11, y = 17, और चरण = 0.5 ऊपर): a_range = [x] + [x + (चरण * i) i के लिए रेंज में (int) ((yx) / चरण))
TheLoneDeranger

23

आप के लिए लग रहे हो range():

>>> x1=11
>>> x2=16
>>> range(x1, x2+1)
[11, 12, 13, 14, 15, 16]
>>> list1 = range(x1, x2+1)
>>> list1
[11, 12, 13, 14, 15, 16]

इसके 0.5बजाय वेतन वृद्धि के लिए 1, कहें:

>>> list2 = [x*0.5 for x in range(2*x1, 2*x2+1)]
>>> list2
[11.0, 11.5, 12.0, 12.5, 13.0, 13.5, 14.0, 14.5, 15.0, 15.5, 16.0]

बस एक छोटी सी नाइटपिक। पहले कोड ब्लॉक में आप listएक चर के रूप में उपयोग करते हैं ।
सांप और कॉफी

2
अजगर listमें एक अंतर्निहित वर्ग है, इसलिए एक चर के रूप में इसका उपयोग कुछ हद तक हतोत्साहित किया जाता है
सांप और कॉफी

x * वेतन वृद्धि, लेकिन क्या आप 2 * शुरू से मतलब है, के लिए क्या? क्या आप कृपया समझाएंगे?
सांतोसा सैंडी

7

प्रयत्न:

range(x1,x2+1)  

वह पायथन 2.x में एक सूची है और अधिकतर पायथन 3.x में एक सूची की तरह व्यवहार करता है। यदि आप पायथन 3 चला रहे हैं और आपको एक सूची की आवश्यकता है जिसे आप संशोधित कर सकते हैं, तो उपयोग करें:

list(range(x1,x2+1))

5

यदि आप फ़ंक्शन जैसी श्रेणी की तलाश कर रहे हैं जो फ्लोट प्रकार के लिए काम करता है, तो यहां एक बहुत अच्छा लेख है

def frange(start, stop, step=1.0):
    ''' "range()" like function which accept float type''' 
    i = start
    while i < stop:
        yield i
        i += step
# Generate one element at a time.
# Preferred when you don't need all generated elements at the same time. 
# This will save memory.
for i in frange(1.0, 2.0, 0.5):
    print i   # Use generated element.
# Generate all elements at once.
# Preferred when generated list ought to be small.
print list(frange(1.0, 10.0, 0.5))    

आउटपुट:

1.0
1.5
[1.0, 1.5, 2.0, 2.5, 3.0, 3.5, 4.0, 4.5, 5.0, 5.5, 6.0, 6.5, 7.0, 7.5, 8.0, 8.5, 9.0, 9.5]

3

अजगर में सूची समझ का उपयोग करें। चूंकि आप सूची में 16 भी चाहते हैं .. x2 + 1 का उपयोग करें। रेंज फ़ंक्शन फ़ंक्शन में उच्च सीमा को बाहर करता है।

सूची = [x के लिए x श्रेणी में (X1, x2 + 1)]


1
यदि आप range()कोई सूची समझने की आवश्यकता का उपयोग नहीं करते हैं
Billal Begueradj

@BillalBegueradj Python3 में, श्रेणी () सूची के बजाय एक जनरेटर जैसी वस्तु लौटाती है। यह मूल रूप से Python 2 में xrange () के समान है। आप सही हैं कि सूची समझ की आवश्यकता नहीं है। सूची () बिलिन फ़ंक्शन आसान है list(range(x1, x2+1)):।
माइक हाउसकी

3

यह मानते हुए कि आप x से y के बीच की सीमा चाहते हैं

range(x,y+1)

>>> range(11,17)
[11, 12, 13, 14, 15, 16]
>>>

3.x समर्थन के लिए सूची का उपयोग करें


2

अजगर में आप यह बहुत उत्सुकता से कर सकते हैं

start=0
end=10
arr=list(range(start,end+1))
output: arr=[0,1,2,3,4,5,6,7,8,9,10]

या आप एक पुनरावर्ती फ़ंक्शन बना सकते हैं जो किसी दिए गए नंबर तक एक सरणी देता है:

ar=[]
def diff(start,end):
    if start==end:
        d.append(end)
        return ar
    else:
        ar.append(end)
        return diff(start-1,end) 

आउटपुट: ar = [10,9,8,7,6,5,4,3,2,1,0]


0

ऐसा करने का सबसे सुंदर तरीका rangeफ़ंक्शन का उपयोग करना है, लेकिन यदि आप इस तर्क को फिर से बनाना चाहते हैं तो आप इस तरह से कुछ कर सकते हैं:

def custom_range(*args):
    s = slice(*args)
    start, stop, step = s.start, s.stop, s.step
    if 0 == step:
        raise ValueError("range() arg 3 must not be zero")
    i = start
    while i < stop if step > 0 else i > stop:
        yield i
        i += step

>>> [x for x in custom_range(10, 3, -1)]

यह उत्पादन का उत्पादन करता है:

[10, 9, 8, 7, 6, 5, 4]

के रूप में @Jared से पहले व्यक्त की, सबसे अच्छा तरीका है का उपयोग करना है rangeया numpy.arrangeफिर भी मुझे लगता है कोड दिलचस्प साझा करने के लिए।


सूची (custom_range (10,3,1)) खाली सूची देता है।
डेनिस रसुलेव

वास्तव में, जैसे [x for x in range(10, 3, 1)]- पहला तर्क है शुरुआत, दूसरा अंत और अंतिम चरण। ==> स्टॉप> स्टार्ट
माइकल

0

प्रत्येक श्रेणी के ऊपर का उत्तर केवल सकारात्मक संख्याओं का है। यहां वैकल्पिक संख्या मान (डिफ़ॉल्ट = 1) सेट करने की संभावना के साथ लगातार संख्याओं की सूची वापस करने का समाधान है जहां तर्क कोई भी (सकारात्मक या नकारात्मक) हो सकते हैं।

def any_number_range(a,b,s=1):
""" Generate consecutive values list between two numbers with optional step (default=1)."""
if (a == b):
    return a
else:
    mx = max(a,b)
    mn = min(a,b)
    result = []
    # inclusive upper limit. If not needed, delete '+1' in the line below
    while(mn < mx + 1):
        # if step is positive we go from min to max
        if s > 0:
            result.append(mn)
            mn += s
        # if step is negative we go from max to min
        if s < 0:
            result.append(mx)
            mx += s
    return result

उदाहरण के लिए, मानक कमांड list(range(1,-3))खाली सूची देता है [], जबकि यह फ़ंक्शन वापस आ जाएगा[-3,-2,-1,0,1]

अपडेट किया गया : अब कदम नकारात्मक हो सकता है। धन्यवाद @Michael उनकी टिप्पणी के लिए।


1
यह मानता है कि आपका कदम सकारात्मक है।
माइकल

@ मिचेल, अच्छी बात है। मैंने कोड अपडेट कर दिया है, इसलिए अब आपके पास नकारात्मक कदम हो सकते हैं :)
डेनिस रसुलेव

@tgikal, यह सही है। लेकिन क्या होगा अगर आपको नहीं पता कि आपके फ़ंक्शन के तर्कों को क्या मान दिया जाएगा और आपको क्रमबद्ध रिटर्न की आवश्यकता है?
डेनिस रसूलेव

मुझे कोई भी अतिरिक्त सुविधाएँ नहीं दिखतीं जो आपका कस्टम फ़ंक्शन करता है जो बिल्ट रेंज फ़ंक्शन का उपयोग करके पूरा नहीं किया जा सकता है, मुझे लगता है कि सुधार का एक उदाहरण बहुत अच्छा होगा, क्योंकि आपका वर्तमान उदाहरण मूल रूप से i_min = -3, i_max = 1 any_number_range(i_max, i_min))रिटर्न है [-3,-2,-1,0,1] , लेकिन, बिलिन list(range(i_min, i_max + 1))समान मान लौटाएगा।
tgikal

अनुक्रम कम होने पर एक नकारात्मक कदम का उपयोग करने का प्रयास करेंlist(range(1,-3, -1))
जुआन एंटोनियो रोल्डन डिआज़
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.