리스트의 각 요소를 int로 어떻게 나누나요?


154

목록의 각 요소를 정수로 나누고 싶습니다.

myList = [10,20,30,40,50,60,70,80,90]
myInt = 10
newList = myList/myInt

이것은 오류입니다.

TypeError: unsupported operand type(s) for /: 'list' and 'int'

이 오류가 발생하는 이유를 이해합니다. 그러나 해결책을 찾을 수 없다는 것에 좌절했습니다.

또한 시도 :

newList = [ a/b for a, b in (myList,myInt)]

오류:

ValueError: too many values to unpack

예상 결과:

newList = [1,2,3,4,5,6,7,8,9]


편집하다:

다음 코드는 예상 결과를 보여줍니다.

newList = []
for x in myList:
    newList.append(x/myInt)

그러나 이것을 수행하는 더 쉽고 빠른 방법이 있습니까?

답변:


233

관용적 방법은 목록 이해를 사용하는 것입니다.

myList = [10,20,30,40,50,60,70,80,90]
myInt = 10
newList = [x / myInt for x in myList]

또는 원래 목록에 대한 참조를 유지해야하는 경우 :

myList[:] = [x / myInt for x in myList]

1
정적 목록 크기가 주어지면 이러한 방법 중 하나가 [mylist [0] / myint, mylist [1] / myint]보다 빠릅니다.
user-2147482637

7
@ user1938107 거의 확실하지는 않지만 어쨌든 피해야 할 마이크로 최적화입니다.
soulcheck

75

먼저 시도한 방법은 실제로 numpy 사용 하여 직접 가능합니다 .

import numpy
myArray = numpy.array([10,20,30,40,50,60,70,80,90])
myInt = 10
newArray = myArray/myInt

긴 목록, 특히 모든 종류의 과학 컴퓨팅 프로젝트에서 이러한 작업을 수행하는 경우 실제로 numpy를 사용하는 것이 좋습니다.


4
나는 이것이 오래된 대답이라는 것을 알고 있지만 여전히 그것을 읽는 사람에게는 numpy.array를 사용할 때 예 numpy.array([10,20,30,40,50,60,70,80,90], dtype='f')를 들어 loat 의 유형을 지정해야합니다 . 그렇지 않으면 3으로 나누면 3.333 대신 3을 얻게됩니다.
Richard Boonen

3
이 경우 @RichardBoonen은 OP가 int 나누기를 원했지만 float 나누기를 원한다면 맞습니다. 유형을 numpy로 지정해야합니다. 또는 목록에 단일 플로트를 넣습니다.numpy.array([10.,20,30,40,50,60,70,80,90])
silvado

24
>>> myList = [10,20,30,40,50,60,70,80,90]
>>> myInt = 10
>>> newList = map(lambda x: x/myInt, myList)
>>> newList
[1, 2, 3, 4, 5, 6, 7, 8, 9]

이 경우지도가 목록 이해력보다 낫다고 생각하십니까? 읽기가 더 쉬워서 목록 이해력으로 갈 때 궁금합니다.
Andrew Cox

@AndrewCox 나는 파이썬이 아닌 배경에서 오는지도를 선호합니다. 목록 이해력도 나에게 더 깨끗해 보이므로 아마도 그렇게해야합니다.
Dogbert

이것이 soulcheck 및 berkantk 솔루션이 게시 한 것보다 빠른지 알고 있습니까?
Casa

@Casa : 누군가 이것을 stackoverflow.com/q/1247490 에서 테스트했습니다 . 결론은이 특별한 경우에 목록 이해력이이기는 것으로 보입니다.
브라이언

4
요즘 map()맵 객체를 반환하므로 목록을 원한다면 명시 적으로 말해야 list()합니다. 따라서이 경우 :newList = list(map(lambda x: x/myInt, myList))
robertmartin8

9
myList = [10,20,30,40,50,60,70,80,90]
myInt = 10
newList = [i/myInt for i in myList]

6

추상 버전은 다음과 같습니다.

import numpy as np
myList = [10, 20, 30, 40, 50, 60, 70, 80, 90]
myInt = 10
newList  = np.divide(myList, myInt)

0
myInt=10
myList=[tmpList/myInt for tmpList in range(10,100,10)]

더 짧게 쓸 수 있습니까?
E.Coms
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.