2009-04-06 8 views
1

나는 python으로 expierenced 아니에요. 'year'필드를 범위 제한으로 정의해야합니다. 이제이 코드를 사용하고 있지만이 작업을 수행하는 방법이 단축되어 있다고 생각합니다.한 줄에 2 튜플을 정의하는 방법이 있습니까?

YEAR_CHOICE = [] 
for year in range(2020,1899,-1): 
    YEAR_CHOICE += [(year, year)] 
year = models.PositiveSmallIntegerField('Year', choices=YEAR_CHOICE, default=0) 

두 줄을 한 줄로 정의하는 방법은 무엇입니까? 나는 내가 필요한 것을 다른 방법으로 만들 수 있을까? 고맙습니다!

답변

8

당신은 list comprehension를 사용하여 보라 : 당신해야 또한 사용 xrange 대신 range

YEAR_CHOICE = [(year,year) for year in xrange(2020,1899,-1)] 

합니다. xrange은 전체 목록을 만드는 것이 아니라 값을 하나씩 반환하기 때문에 선호됩니다.

+0

, "지능형리스트" –

+0

또는 검색은 링크를 클릭 내 대답에 덧붙였다. –

+0

xrange()는 Python 2.6 이상으로 많이 사용됩니다. xrange()는 python 3.0에서 중단되었으며 range()는 이전 버전에서 xrange()에서 3.0으로 수행됩니다. – hughdbrown

3

zip 자체 범위 :

YEAR_CHOICE = zip(*[range(2020,1899,-1)]*2) 

또는 사용 list comprehension : 전에 용어를 보았다하지 않을 수 있습니다 사람들을 위해

YEAR_CHOICE = [(year,year) for year in range(2020,1899,-1)] 
+0

우편 번호는 영리하지만 경험 많은 파이썬 프로그래밍이라 할지라도 그것이 실제로 무엇을하고 왜 작동 하는지를 분간하기 위해 잠깐 생각해 볼 필요가 있습니다. 개인적으로 더 길지 만 명료하게 목록을 이해할 것을 권합니다. –

+0

예, zip (* [range (2020,1899, -1)] * 2)은 zip (범위 (2020,1899, -1), 범위 (2020,1899, -1))입니다. – vartec

관련 문제