두 값 사이에 숫자가 있는 목록을 작성하려면 어떻게 해야 합니까?
두 값 사이에 오름차순 목록을 작성하려면 어떻게 해야 합니까?예를 들어, 11 ~16 의 리스트는 다음과 같습니다.
[11, 12, 13, 14, 15, 16]
를 사용합니다. Python 2에서는 직접 목록을 반환합니다.
>>> range(11, 17)
[11, 12, 13, 14, 15, 16]
Python 3에서는 를 반복합니다.목록으로 변환하려면:
>>> list(range(11, 17))
[11, 12, 13, 14, 15, 16]
주의: 의 두 번째 번호range(start, stop)
는 배타적입니다.그렇게,stop = 16+1 = 17
.
단계별로 증가하려면0.5
, numpy 및 를 사용하는arange()
것을 검토합니다.
>>> 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]
참조: range()에 10진수 스텝 값을 사용하는 방법
다음을 찾고 있는 것 같습니다.
>>> 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]
시험:
range(x1, x2+1)
이것은 Python 2.x의 목록이며 대부분 Python 3.x의 목록과 같이 동작합니다.Python 3을 실행하고 있으며 수정할 수 있는 목록이 필요한 경우 다음을 사용하십시오.
list(range(x1, x2+1))
x에서 y 사이의 범위를 갖는다고 가정합니다.
range(x,y+1)
>>> range(11,17)
[11, 12, 13, 14, 15, 16]
>>>
3.x 지원에 목록 사용
플로트 타입으로 기능하는 레인지와 같은 기능을 찾고 있다면, 여기 매우 좋은 기사가 있습니다.
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]
python에서는 목록 이해를 사용합니다.너도 16명을 원하니까..x2+1을 사용합니다.범위 함수는 함수의 상한 값을 제외합니다.
list=[x for x in range(x1, x2+1)]
Python에서는 이것을 매우 쉽게 할 수 있다.
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.1씩 증가하여 -10에서 10 사이의 범위를 만들고 싶어서 여기에 왔습니다.위의 대부분의 답변과 같이 지나치게 복잡한 기능을 수행하는 대신 이 기능을 수행했습니다.
simple_range = [ x*0.1 for x in range(-100, 100) ]
레인지 카운트를 100으로 변경함으로써 표준 레인지 기능을 사용하여 -10~10의 레인지를 얻을 수 있게 되었습니다.따라서 0.2까지 필요한 경우 범위(-200, 200) 등을 수행합니다.
이를 위한 가장 우아한 방법은 다음과 같습니다.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
하지만 코드를 공유하는 것은 흥미롭습니다.
위의 모든 답변은 범위가 양수라고 가정합니다.다음은 선택적 단계 값(기본값 = 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의 코멘트 감사합니다.
, 답변은 @Jared의 인크리먼트에 합니다.0.5
스텝 사이즈. 다른 스텝 사이즈에서는 반올림 문제로 인해 실패합니다.
np.arange(11, 17, 0.1).tolist()
# [11.0,11.1,11.2,11.299999999999999, ... 16.79999999999998, 16.899999999999977]
나 자신도 게 했어, ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★0.5
:
# Example 11->16 step 0.5
s = 11
e = 16
step = 0.5
my_list = [round(num, 2) for num in np.linspace(s,e,(e-s)*int(1/step)+1).tolist()]
# [11.0, 11.5, 12.0, 12.5, 13.0, 13.5, 14.0, 14.5, 15.0, 15.5, 16.0]
# Example 0->1 step 0.1
s = 0
e = 1
step = 0.1
my_list = [round(num, 2) for num in np.linspace(s,e,(e-s)*int(1/step)+1).tolist()]
# [0.0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0]
@YTZ의 답변은 제 경우에는 잘 들어맞았습니다.0.01의 스텝으로 0에서 10000까지의 리스트를 생성해야 했고, 반올림 문제로 인해 반복마다 0.01을 추가하는 것만으로 동작하지 않았습니다.
그래서 @를 사용했습니다.YTZ의 조언과 다음 함수를 작성했습니다.
import numpy as np
def generate_floating_numbers_in_range(start: int, end: int, step: float):
"""
Generate a list of floating numbers within a specified range.
:param start: range start
:param end: range end
:param step: range step
:return:
"""
numbers = np.linspace(start, end,(end-start)*int(1/step)+1).tolist()
return [round(num, 2) for num in numbers]
언급URL : https://stackoverflow.com/questions/18265935/how-do-i-create-a-list-with-numbers-between-two-values
'programing' 카테고리의 다른 글
MySQL 스토어드 프로시저에서 사용 여부 (0) | 2022.09.21 |
---|---|
그림.js v2 - 격자선 숨기기 (0) | 2022.09.21 |
PHP를 사용한 301 또는 302 리다이렉션 (0) | 2022.09.21 |
도커에서 MySQL 설치가 실패하고 "소켓을 통해 로컬 MySQL 서버에 연결할 수 없습니다"라는 오류 메시지가 표시됩니다. (0) | 2022.09.21 |
Java 프로그램 실행 경로를 가져오는 방법 (0) | 2022.09.21 |