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


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

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

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

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.