목록의 각 요소에 정수를 추가하는 방법은 무엇입니까?


135

만약 내가 list=[1,2,3]내가 추가 할 1출력을 얻기 위해 각 요소에 [2,3,4], 나는 어떻게 할 것인가?

나는 for 루프를 사용한다고 가정하지만 정확히 어떻게 확신하지 못합니다.

답변:


157
new_list = [x+1 for x in my_list]

6
이 이야기는 그것을 설명합니다 : 파이썬 이름과 가치에 관한 사실과 신화 : nedbatchelder.com/text/names1.html
Ned Batchelder

√ 멋진 정보. 눈을 뜨다.
Daniel Springer

3
@DaniSpringer 목록에 지정하지 않았기 때문입니다. 하는 것과 같습니다 lst = [1, 2, 3]; e = lst[0]; e += 1. e어디에서 왔는지에 대한 정보가 없으며 목록의 요소가 할당 된 변수 일뿐입니다. 다른 것을 할당 한 후에는 목록 lst이 변경되지 않습니다.
Błażej Michalik

글쎄,이 대답은 나에게 매우 비슷해 보인다.
다니엘 스프링거

그리고 대응하는 게으른 사람이 계산 한 것 :new_list = (x+1 for x in my_list)
Eduardo Pignatelli


24

목록 이해에 대한 다른 답변은 아마도 간단한 추가에 가장 좋은 방법 일 것입니다. 그러나 더 복잡한 기능이 있으면 모든 요소에 적용 해야하는 경우 map 이 적합 할 수 있습니다.

귀하의 예에서는 다음과 같습니다.

>>> map(lambda x:x+1, [1,2,3])
[2,3,4]

7
map(1 .__add__, ...)작동합니다. 참고 사이에 공간을 필요로 1하고 .그것이 부동이다 파서 생각 방지하기
존 라 Rooy

15

numpy를 사용하려면 다음과 같은 다른 방법이 있습니다.

import numpy as np
list1 = [1,2,3]
list1 = list(np.asarray(list1) + 1)

13

편집 : 이것은 제자리에 없습니다

먼저 변수에 'list'라는 단어를 사용하지 마십시오. 키워드를 숨 깁니다 list.

가장 좋은 방법은 스 플라이 싱을 사용하여 제자리에 수행하는 것입니다 [:]. 스플 라이스를 나타냅니다.

>>> _list=[1,2,3]
>>> _list[:]=[i+1 for i in _list]
>>> _list
[2, 3, 4]

4
기존 목록을 변경하는 데 유용하지만 여전히 새 목록을 생성합니다. 불필요한 목록 생성을 피하기 위해 생성기를 사용하는 것이 어떻게 안전하지 않습니까? 즉 _list[:]=(i+1 for i in _list).
Alan

여전히 새 목록을 만듭니다. for 루프없이 제자리에 놓을 수는 없습니다. 생각하지 않습니다
로버트 킹

_list[:]=(i+1 for i in _list)새 목록을 작성 한다고 생각 하십니까?
Alan

나는 그것이 제자리에 있지만 일시적으로 rhs에 대한 완전히 새로운 목록을 만들 것입니다. 다음 답변을 참조하십시오 : stackoverflow.com/questions/4948293/… stackoverflow.com/questions/11877212/…
로버트 킹

무슨 말인지 알 겠어 임시 시퀀스를 목록으로 부르면 혼란스러워했습니다. 실제로 유형에 대해 알고 있습니까? 구현에 국한되지 않습니까?
Alan

9
>>> [x.__add__(1) for x in [1, 3, 5]]
3: [2, 4, 6]

여기서 의도는 목록의 항목이 다양한 내장 함수를 지원하는 정수인 경우 노출하는 것입니다.


7

파이썬 2 이상 :

>>> mylist = [1,2,3]
>>> map(lambda x: x + 1, mylist)
[2, 3, 4]

파이썬 3 이상 :

>>> mylist = [1,2,3]
>>> list(map(lambda x: x + 1, mylist))
[2, 3, 4]


2

그렇게 효율적이지 않지만 독특한 방식으로 진행되었습니다. 공유하고 다른 목록을위한 추가 공간이 필요합니다.

from operator import add
test_list1 = [4, 5, 6, 2, 10]
test_list2 = [1] * len(test_list1)

res_list = list(map(add, test_list1, test_list2))

print(test_list1)
print(test_list2)
print(res_list)

#### Output ####
[4, 5, 6, 2, 10]
[1, 1, 1, 1, 1]
[5, 6, 7, 3, 11]

"추가"는 어디에서 왔습니까?
hahnec 2018

추가 연산자에서 가져와야합니다from operator import add
Rajith Thennakoon

0
list = [1,2,3,4,5]

for index in range(5):
      list[index] = list[index] +1

print(list)

0

위의 많은 답변이 매우 좋습니다. 나는 또한 일을 할 이상한 답변을 보았습니다. 또한 마지막으로 본 대답은 일반 루프를 통한 것입니다. 이 의지에 대한 답변 리드에게 나를주고 itertoolsnumpy다른 방식으로 같은 일을 할 것이다.

여기에 위에서 대답하지 않은 다른 방법으로 작업을 수행합니다.

import operator
import itertools

x = [3, 5, 6, 7]

integer = 89

"""
Want more vairaint can also use zip_longest from itertools instead just zip
"""
#lazy eval
a = itertools.starmap(operator.add, zip(x, [89] * len(x))) # this is not subscriptable but iterable
print(a)
for i in a:
  print(i, end = ",")


# prepared list
a = list(itertools.starmap(operator.add, zip(x, [89] * len(x)))) # this returns list
print(a)



# With numpy (before this, install numpy if not present with `pip install numpy`)
import numpy

res = numpy.ones(len(x), dtype=int) * integer + x # it returns numpy array
res = numpy.array(x) + integer # you can also use this, infact there are many ways to play around
print(res)
print(res.shape) # prints structure of array, i.e. shape

# if you specifically want a list, then use tolist

res_list = res.tolist()
print(res_list)

산출

>>> <itertools.starmap object at 0x0000028793490AF0> # output by lazy val
>>> 92,94,95,96,                                     # output of iterating above starmap object
>>> [92, 94, 95, 96]                                 # output obtained by casting to list
>>>                   __
>>> # |\ | |  | |\/| |__| \ /
>>> # | \| |__| |  | |     |
>>> [92 94 95 96]                                    # this is numpy.ndarray object
>>> (4,)                                             # shape of array
>>> [92, 94, 95, 96]                                 # this is a list object (doesn't have a shape)

그것 의 사용을 강조하는 유일한 이유 numpy는 매우 큰 배열에 대해 성능 효율적이기 때문에 항상 numpy와 같은 라이브러리로 그러한 조작을 수행해야한다는 것입니다.

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