Jawaban:
Gunakan range
. Dalam Python 2.x ia mengembalikan daftar sehingga yang Anda butuhkan adalah:
>>> range(11, 17)
[11, 12, 13, 14, 15, 16]
Dalam Python 3.x range
adalah iterator. Jadi, Anda perlu mengubahnya menjadi daftar:
>>> list(range(11, 17))
[11, 12, 13, 14, 15, 16]
Catatan : Angka kedua adalah eksklusif. Jadi, di sini perlu 16+1
=17
EDIT:
Untuk menanggapi pertanyaan tentang penambahan oleh 0.5
, opsi termudah mungkin adalah menggunakan numpy arange()
dan .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]
step
parameter ketiga tapi itu masih int - bukan float. Anda tidak dapat melakukannya dengan tepat di lib standar.
Anda sepertinya mencari 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]
Untuk menambah dengan 0.5
alih-alih 1
, katakan:
>>> 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
sebagai variabel.
list
adalah kelas builtin, jadi penggunaannya sebagai variabel agak tidak dianjurkan
Mencoba:
range(x1,x2+1)
Itu adalah daftar di Python 2.x dan berperilaku sebagian besar seperti daftar di Python 3.x. Jika Anda menjalankan Python 3 dan membutuhkan daftar yang dapat Anda modifikasi, maka gunakan:
list(range(x1,x2+1))
Jika Anda mencari rentang seperti fungsi yang bekerja untuk tipe float, maka di sini adalah artikel yang sangat bagus .
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))
Keluaran:
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]
Gunakan pemahaman daftar dalam python. Karena Anda ingin 16 dalam daftar juga .. Gunakan x2 +1. Fungsi rentang tidak termasuk batas yang lebih tinggi dalam fungsi.
list = [x untuk x dalam rentang (x1, x2 + 1)]
range()
tidak perlu menggunakan daftar pemahaman
list(range(x1, x2+1))
.
Dengan python Anda bisa melakukannya dengan sangat mudah
start=0
end=10
arr=list(range(start,end+1))
output: arr=[0,1,2,3,4,5,6,7,8,9,10]
atau Anda dapat membuat fungsi rekursif yang mengembalikan array ke nomor yang diberikan:
ar=[]
def diff(start,end):
if start==end:
d.append(end)
return ar
else:
ar.append(end)
return diff(start-1,end)
output: ar = [10,9,8,7,6,5,4,3,2,1,0]
Cara paling elegan untuk melakukan ini adalah dengan menggunakan range
fungsi namun jika Anda ingin membuat kembali logika ini Anda dapat melakukan sesuatu seperti ini:
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)]
Ini menghasilkan output:
[10, 9, 8, 7, 6, 5, 4]
Seperti yang diungkapkan sebelumnya oleh @Jared, cara terbaik adalah menggunakan range
atau numpy.arrange
namun saya menemukan kode yang menarik untuk dibagikan.
[x for x in range(10, 3, 1)]
- argumen pertama adalah awal, akhir kedua dan terakhir langkah. ==> stop> start
Setiap jawaban di atas menganggap kisaran hanya dari angka positif. Berikut adalah solusi untuk mengembalikan daftar angka berurutan di mana argumen dapat berupa (positif atau negatif), dengan kemungkinan untuk menetapkan nilai langkah opsional (default = 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
Misalnya, perintah standar list(range(1,-3))
mengembalikan daftar kosong []
, sementara fungsi ini akan kembali[-3,-2,-1,0,1]
Diperbarui : sekarang langkah mungkin negatif. Terima kasih @Michael atas komentarnya.
i_min = -3, i_max = 1
any_number_range(i_max, i_min))
kembali [-3,-2,-1,0,1]
tetapi, builtin list(range(i_min, i_max + 1))
akan mengembalikan nilai yang sama.
list(range(1,-3, -1))