পাইথন - 2 টি মানের মধ্যে সংখ্যা সহ তালিকা তৈরি করুন?


355

আমি যে দুটি মান রেখেছি তার মধ্যে আমি কীভাবে একটি তালিকা তৈরি করব? উদাহরণস্বরূপ, নিম্নলিখিত তালিকাটি 11 থেকে 16 পর্যন্ত মানের জন্য উত্পন্ন হয়:

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

উত্তর:


643

ব্যবহার range। পাইথন ২.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
অসাধারণ! ঠিক আমি খুঁজছেন ছিল কি! মাত্র ১ এর চেয়ে ০.৫ এর মতো ছোট মান দ্বারা বর্ধনেরও কি উপায় আছে? সুতরাং [11.0, 11.5, 12.0 ...... 16.0]
প্রভু

2
@ লর্ড আপনি তৃতীয় stepপ্যারামিটার দিয়ে 1 টিরও বেশি বৃদ্ধি করতে পারেন তবে এটি এখনও একটি অন্তর্নিহিত - ভাসা নয়। আপনি স্ট্যান্ডার্ড লিবেতে ঠিক এটি করতে পারবেন না।
জেরেড

@ জারেড কিছু ব্যবধানের পরে কিছু মান ফেলে আমি একটি তালিকা তৈরি করতে পারি। [

2
পাইথন 2.x এবং 3.x সম্পর্কে বলার জন্য ভাল
সিগুর

যদি আপনি এমন পরিস্থিতিতে কাজ করছেন যেখানে নপিগুলি অযাচিত হয়, তবে বিবেচনা করুন (যেখানে x = 11, y = 17, এবং উপরে ধাপ = 0.5): a_range = [x] + [x + (পদক্ষেপ * 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একটি অন্তর্নির্মিত শ্রেণি, সুতরাং ভেরিয়েবল হিসাবে এর ব্যবহার কিছুটা নিরুৎসাহিত
সাপ এবং কফি

এক্স * ইনক্রিমেন্ট, তবে আপনি 2 * প্রারম্ভিক মূল্য বলতে কী বোঝায়? আপনি দয়া করে ব্যাখ্যা করবেন?
সান্টোসা স্যান্ডি

7

চেষ্টা করুন:

range(x1,x2+1)  

এটি পাইথন ২.x এর একটি তালিকা এবং পাইথন ৩.x-এর তালিকার মতো আচরণ করে mostly যদি আপনি পাইথন 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 ব্যবহার করুন। পরিসীমা ফাংশন ফাংশনের উচ্চতর সীমা বাদ দেয়।

তালিকা = [এক্স এক্সের জন্য রেঞ্জের (x1, x2 + 1)]


1
আপনার যদি range()কোনও তালিকা বোঝার প্রয়োজন হয় না
বিল্লাল বেগ্রেডজ

পাইথন 3-এ @ বিল্লালবেগ্রাদজ, পরিসীমা () একটি তালিকার পরিবর্তে জেনারেটরের মতো বস্তুটি প্রদান করে। এটি মূলত পাইথন ২-এ এক্সরেঞ্জ () এর মতোই You're আপনি ঠিক বলেছেন যে তালিকা বোঝার প্রয়োজন নেই। তালিকা () builtin ফাংশন সহজ: list(range(x1, x2+1))
মাইক হাউস্কি

3

ধরে নিচ্ছি আপনি x থেকে y এর মধ্যে একটি পরিসর রাখতে চান

range(x,y+1)

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

3.x সমর্থন জন্য ব্যবহার তালিকা


2

অজগর আপনি খুব eaisly এটি করতে পারেন

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) 

আউটপুট: আর = [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অবশ্য আমি খুঁজে কোড আকর্ষণীয় ভাগ করা।


তালিকা (কাস্টম_রেঞ্জ (10,3,1)) খালি তালিকা দেয়।
ডেনিস রসুলেভ

প্রকৃতপক্ষে, যেমন [x for x in range(10, 3, 1)]- প্রথম যুক্তিটি হ'ল শুরু, দ্বিতীয় প্রান্ত এবং শেষ পদক্ষেপ। ==> থামুন> শুরু করুন
মাইকেল

0

উপরের প্রতিটি উত্তরের পরিসীমাটি ধনাত্মক সংখ্যারই অনুমান করে। Consecচ্ছিক পদক্ষেপের মান সেট করার সম্ভাবনা (ডিফল্ট = 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]

আপডেট : এখন পদক্ষেপ নেতিবাচক হতে পারে। মিচেল তার মন্তব্যের জন্য ধন্যবাদ।


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))
জুয়ান আন্তোনিও রোলডেন দাজ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.