2011-05-15 4 views
2

초보자 - 내가하고있는 운동에 대한 답변을 찾고 있었고 here에서 내 답변을 얻었습니다. 내 질문은 이것이다 - 스레드에서, 하나는, 정답으로 선택이 코드이었다[float (i) for i]

[float(i) for i in lst] 

코드가 수행하기로되어 있었는지했지만 나는 그 새 목록에 도착하려고 할 때, 나는 오류가 발생했습니다

>>> xs = '12 10 32 3 66 17 42 99 20'.split() 
>>> [float(i) for i in xs] 
[12.0, 10.0, 32.0, 3.0, 66.0, 17.0, 42.0, 99.0, 20.0] 
>>> i 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
NameError: name 'i' is not defined 

어떻게해야합니까?

감사합니다.

+3

파이썬 프롬프트가 출력 할 때마다, 방금 입력 한 값이 값을 반환했기 때문입니다. 입력 한 표현식에 변수를 지정하여 그 값을 유지할 수 있지만 아무 것도 인쇄되지 않습니다. – SingleNegationElimination

답변

7

당신은 뭔가 [float(i) for i in xs]을 할당 할 수 있습니다

>>> new_list = [float(i) for i in xs] 
>>> new_list 
[12.0, 10.0, 32.0, 3.0, 66.0, 17.0, 42.0, 99.0, 20.0] 
>>> new_list[0] 
12.0 
>>> new_list[5] 
17.0 
0

i은 목록의 이해 내부에 존재한다. 목록 빌려 내부의 var에 평가 한 후 기존의 정지 변수에 바인딩 마지막 반복을 남겨 for 루프와는 달리

i = [float(i) for i in lst] 
+2

목록 이해력의 내부와 외부 변수로 'i'를 사용하면 불필요한 혼동을 초래할 수 있습니다. – Johnsyweb

+0

또는 오히려 어쩌면 당신이 정말로 * 원하는 것은'floatlist = [....'입니다. 왜냐하면 반복자 다음에리스트를 명명하는 것이 다소 혼란 스럽기 때문입니다. 완성을 위해 – SingleNegationElimination

+1

,'i'는 파이썬 3의 목록 내재 안에 존재합니다. 파이썬 2에서는'i' 밖에 접근 할 수 있습니다. – carl

1

:

당신은 말하고 싶다.

3

사용지도 :

xs = '12 10 32 3 66 17 42 99 20'.split() 
new_xs = map(float, xs) 
+2

['map()'] (http://docs.python.org/library/functions.html#map)을 사용하면 확실히이를 달성하는 가장 좋은 방법입니다. – Johnsyweb

0

이 파이썬 버전에 관련된 무언가이다. 당신이 경우에, 파이썬 2 일 을 : 봐

>>> i = 1234 
>>> j = [i for i in xrange(10)] 
>>> print i 
9 

그러나 이것은 파이썬 3에서 수정되었습니다 : 파이썬 3.0 또는 뛰어난이있는 경우

>>> i = 1234 
>>> j = [i for i in range(10)] 
>>> print(i) 
1234 

이 변수 만 이해에서 사용할 수 있습니다 . 나머지 환경에 영향을 미치지 않습니다.

0

목록 이해에 이름을 할당하는 대신 파이썬 대화 형 모드에서 _ 기호가 자동으로 해석기에서 평가 한 마지막 표현식에 지정됩니다. 따라서 다음을 할 수 있습니다 :

>>> xs = '12 10 32 3 66 17 42 99 20'.split() 
>>> [float(i) for i in xs] 
[12.0, 10.0, 32.0, 3.0, 66.0, 17.0, 42.0, 99.0, 20.0] 
>>> _ 
[12.0, 10.0, 32.0, 3.0, 66.0, 17.0, 42.0, 99.0, 20.0] 
>>> _[2] 
32.0 
>>> _ 
32.0