Câu trả lời:
Sử dụng range
. Trong Python 2.x, nó trả về một danh sách, vì vậy tất cả những gì bạn cần là:
>>> range(11, 17)
[11, 12, 13, 14, 15, 16]
Trong Python 3.x range
là một trình vòng lặp. Vì vậy, bạn cần chuyển đổi nó thành một danh sách:
>>> list(range(11, 17))
[11, 12, 13, 14, 15, 16]
Lưu ý : Số thứ hai là độc quyền. Vì vậy, ở đây cần phải được 16+1
=17
BIÊN TẬP:
Để trả lời câu hỏi về việc tăng theo 0.5
, tùy chọn dễ nhất có lẽ là sử dụng numpy arange()
và .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
tham số thứ ba nhưng đó vẫn là số nguyên - không nổi. Bạn không thể làm điều đó chính xác trong lib tiêu chuẩn.
Bạn dường như đang tìm kiếm 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]
Để tăng thêm 0.5
thay vì 1
, hãy nói:
>>> 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
như một biến.
list
là một lớp dựng sẵn, vì vậy việc sử dụng nó như một biến số có phần không được khuyến khích
Thử:
range(x1,x2+1)
Đó là một danh sách trong Python 2.x và hoạt động chủ yếu giống như một danh sách trong Python 3.x. Nếu bạn đang chạy Python 3 và cần một danh sách mà bạn có thể sửa đổi, thì hãy sử dụng:
list(range(x1,x2+1))
Nếu bạn đang tìm kiếm phạm vi giống như chức năng hoạt động cho loại float, thì đây là một bài viết rất tốt .
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))
Đầu ra:
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]
Sử dụng danh sách hiểu trong python. Vì bạn cũng muốn 16 trong danh sách .. Sử dụng x2 + 1. Hàm phạm vi loại trừ giới hạn cao hơn trong hàm.
list = [x cho x trong phạm vi (x1, x2 + 1)]
range()
không cần sử dụng khả năng hiểu danh sách
list(range(x1, x2+1))
.
Trong python bạn có thể làm điều này rất háo hức
start=0
end=10
arr=list(range(start,end+1))
output: arr=[0,1,2,3,4,5,6,7,8,9,10]
hoặc bạn có thể tạo một hàm đệ quy trả về một mảng cho đến một số đã cho:
ar=[]
def diff(start,end):
if start==end:
d.append(end)
return ar
else:
ar.append(end)
return diff(start-1,end)
đầu ra: ar = [10,9,8,7,6,5,4,3,2,1,0]
Cách thanh lịch nhất để làm điều này là bằng cách sử dụng range
chức năng tuy nhiên nếu bạn muốn tạo lại logic này, bạn có thể làm một cái gì đó như thế này:
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)]
Điều này tạo ra đầu ra:
[10, 9, 8, 7, 6, 5, 4]
Như được thể hiện trước đây bởi @Jared, cách tốt nhất là sử dụng range
hoặc numpy.arrange
tuy nhiên tôi thấy mã thú vị được chia sẻ.
[x for x in range(10, 3, 1)]
- đối số đầu tiên là bắt đầu, thứ hai kết thúc và bước cuối cùng. ==> dừng> bắt đầu
Mỗi câu trả lời ở trên giả định phạm vi chỉ là số dương. Dưới đây là giải pháp trả về danh sách các số liên tiếp trong đó các đối số có thể là bất kỳ (dương hoặc âm), với khả năng đặt giá trị bước tùy chọn (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
Ví dụ, lệnh tiêu chuẩn list(range(1,-3))
trả về danh sách trống []
, trong khi chức năng này sẽ trả về[-3,-2,-1,0,1]
Cập nhật : bây giờ bước có thể là tiêu cực. Cảm ơn @Michael cho nhận xét của mình.
i_min = -3, i_max = 1
any_number_range(i_max, i_min))
trả về [-3,-2,-1,0,1]
Nhưng, nội dung list(range(i_min, i_max + 1))
sẽ trả về cùng các giá trị.
list(range(1,-3, -1))