Python-두 값 사이의 숫자로 목록을 만드시겠습니까?


355

입력 한 두 값 사이의 값으로 목록을 작성하려면 어떻게해야합니까? 예를 들어 11에서 16 사이의 값에 대해 다음 목록이 생성됩니다.

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

답변:


643

사용하십시오 range. Python 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, 가장 쉬운 옵션은 아마도 사용하는 것입니다 NumPy와의 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
대박! 정확히 내가 찾던 것! 1보다 0.5와 같이 작은 값으로 증분하는 방법도 있습니까? [11.0, 11.5, 12.0 ...... 16.0]
lorde

2
@lorde 세 번째 step매개 변수로 1 이상 증가 할 수 있지만 여전히 부동 소수점이 아닙니다. 표준 라이브러리에서는 정확히 그렇게 할 수 없습니다.
Jared

@Jared 약간의 간격 후에 값을 삭제하여 목록을 만들 수 있습니까? 같은 [1,2,3,5,6,7,9,10,11,13,14,15,17,18,19]

2
Python 2.x 및 3.x에 대해 설명하면 좋습니다.
Sigur

numpy가 원치 않는 상황에서 작업하는 경우 (위의 x = 11, y = 17 및 step = 0.5) 고려하십시오 .a_range = [x] + [x + (step * i) ((yx) / step))]
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내장 클래스이므로 변수로 사용하는 것은 다소 권장하지 않습니다
Snakes and Coffee

x * increment, 그러나 2 * startvalue는 무엇을 의미합니까? 설명해 주시겠습니까?
Santosa Sandy

7

시험:

range(x1,x2+1)  

이것은 Python 2.x의 목록이며 대부분 Python 3.x의 목록처럼 동작합니다. Python 3을 실행 중이고 수정할 수있는 목록이 필요한 경우 다음을 사용하십시오.

list(range(x1,x2+1))

5

float 유형에서 작동하는 함수와 같은 범위를 찾고 있다면 여기에 매우 좋은 기사가 있습니다.

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을 사용하십시오. 범위 기능은 기능의 상한을 제외합니다.

list = [x 범위 x (x1, x2 + 1)]


1
당신이 사용하지 않는 경우 range()목록 이해 사용할 필요
Billal Begueradj

@BillalBegueradj Python3에서 range ()는 목록 대신 생성기 같은 객체를 반환합니다. 파이썬 2의 xrange ()와 기본적으로 동일합니다.리스트 이해가 필요하지 않은 것이 맞습니다. list () 내장 함수가 더 쉽습니다 list(range(x1, x2+1)).
Mike Housky

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그러나 내가 코드 흥미를 공유 할 찾을 수 있습니다.


list (custom_range (10,3,1))는 빈 목록을 반환합니다.
Denis Rasulev

실제로, [x for x in range(10, 3, 1)]첫 번째 인수는 시작, 두 번째 끝 및 마지막 단계입니다. ==> 중지> 시작
Michael

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))은 empty list를 반환 []하지만이 함수는[-3,-2,-1,0,1]

업데이트 됨 : 이제 단계가 음수 일 수 있습니다. 그의 의견에 대해 @Michael에게 감사드립니다.


1
이것은 당신의 발걸음이 긍정적이라고 가정합니다.
Michael

@ 마이클, 좋은 지적. 코드를 업데이트 했으므로 이제 부정적인 단계를 수행 할 수 있습니다.
Denis Rasulev

@tgikal, 맞습니다. 그러나 함수의 인수에 어떤 값이 할당 될지 모르고 정렬 된 반환이 필요한 경우 어떻게해야합니까?
Denis Rasulev

내장 범위 함수를 사용하여 수행 할 수없는 사용자 정의 함수가 수행하는 추가 기능을 볼 수 없습니다. 현재 예제가 기본적으로 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))
Juan Antonio Roldán Díaz
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.