답변:
목록 이해 사용 :
>>> lst = [['a','b','c'], [1,2,3], ['x','y','z']]
>>> lst2 = [item[0] for item in lst]
>>> lst2
['a', 1, 'x']
당신은 우편 번호를 사용할 수 있습니다 :
>>> lst=[[1,2,3],[11,12,13],[21,22,23]]
>>> zip(*lst)[0]
(1, 11, 21)
또는 zip
목록을 생성하지 않는 Python 3 :
>>> list(zip(*lst))[0]
(1, 11, 21)
또는,
>>> next(zip(*lst))
(1, 11, 21)
또는 (내가 가장 좋아하는) numpy를 사용하십시오.
>>> import numpy as np
>>> a=np.array([[1,2,3],[11,12,13],[21,22,23]])
>>> a
array([[ 1, 2, 3],
[11, 12, 13],
[21, 22, 23]])
>>> a[:,0]
array([ 1, 11, 21])
list
거나 사용하십시오 next
. 감사합니다
같은 문제가 있었고 각 솔루션의 성능에 대해 궁금했습니다.
여기 있습니다 %timeit
:
import numpy as np
lst = [['a','b','c'], [1,2,3], ['x','y','z']]
배열을 변환하는 첫 번째 numpy-way :
%timeit list(np.array(lst).T[0])
4.9 µs ± 163 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)
목록 이해 (@alecxe에서 설명)를 사용하는 완전히 기본 :
%timeit [item[0] for item in lst]
379 ns ± 23.1 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)
zip
@dawg가 설명하는 다른 기본 방법 :
%timeit list(zip(*lst))[0]
585 ns ± 7.26 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)
두 번째 numpy-way. 또한 @dawg에 의해 설명되었습니다 :
%timeit list(np.array(lst)[:,0])
4.95 µs ± 179 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)
놀랍게도 (적어도 나에게는) 목록 이해를 사용하는 기본 방법은 numpy-way보다 빠르며 약 10 배 빠릅니다. 마지막없이 두 개의 numpy-way를 실행 list
하면 약 1µs가 절약되며 이는 여전히 10 배 차이입니다.
각 코드 스 니펫을에 대한 호출로 둘러 쌀 때 len
생성기가 끝까지 실행되도록 타이밍이 동일하게 유지되었습니다.
Python에는 itemgetter라는 함수가 포함되어있어 목록의 특정 색인에있는 항목을 반환합니다.
from operator import itemgetter
검색하려는 항목의 색인을 itemgetter () 함수에 전달하십시오. 첫 번째 항목을 검색하려면 itemgetter (0)을 사용합니다. 이해해야 할 중요한 것은 itemgetter (0) 자체가 함수를 반환한다는 것입니다. 해당 함수에 목록을 전달하면 특정 항목이 나타납니다.
itemgetter(0)([10, 20, 30]) # Returns 10
이것은 함수를 첫 번째 인수로 사용하는 list (또는 다른 반복 가능)를 두 번째 인수로 사용하는 map ()과 결합 할 때 유용합니다. iterable에서 각 객체에 대해 함수를 호출 한 결과를 반환합니다.
my_list = [['a', 'b', 'c'], [1, 2, 3], ['x', 'y', 'z']]
list(map(itemgetter(0), my_list)) # Returns ['a', 1, 'x']
map ()은 제너레이터를 반환하므로 결과는 실제 목록을 얻기 위해 list ()로 전달됩니다. 요약하면 다음과 같이 작업을 수행 할 수 있습니다.
lst2.append(list(map(itemgetter(0), lst)))
이것은 목록 이해를 사용하기위한 대체 방법이며 컨텍스트, 가독성 및 선호도에 따라 크게 선택할 수 있습니다.
추가 정보 : https://docs.python.org/3/library/operator.html#operator.itemgetter
코드가 거의 정확합니다. 유일한 문제는 목록 이해의 사용법입니다.
다음과 같이 사용하면 (lst에서 x의 경우 x [0]) 생성기 객체를 반환합니다. 다음과 같이 사용하면 [x에서 lst의 경우 [x [0]] 목록을 반환합니다.
목록 이해 결과를 목록에 추가하면 목록 이해 결과는 목록의 단일 요소입니다.
lst = [["a","b","c"], [1,2,3], ["x","y","z"]]
lst2 = []
lst2.append([x[0] for x in lst])
print lst2[0]
lst2 = [[ 'a', 1, 'x']]
lst2 [0] = [ 'a', 1, 'x']
내가 틀렸다면 알려주십시오.
기존 목록이 있다고 말했습니다. 그래서 나는 그것으로 갈 것입니다.
>>> lst1 = [['a','b','c'], [1,2,3], ['x','y','z']]
>>> lst2 = [1, 2, 3]
현재 생성기 객체를 두 번째 목록에 추가하고 있습니다.
>>> lst2.append(item[0] for item in lst)
>>> lst2
[1, 2, 3, <generator object <genexpr> at 0xb74b3554>]
그러나 아마도 첫 번째 항목의 목록이되기를 원할 것입니다.
>>> lst2.append([item[0] for item in lst])
>>> lst2
[1, 2, 3, ['a', 1, 'x']]
이제 첫 번째 항목 목록을 기존 목록에 추가했습니다. 항목 자체가 아닌 항목 자체를 기존 항목에 추가하려면 list.extend를 사용합니다. 이 경우 확장 프로그램은 생성기를 사용하여 현재 목록을 확장하기 위해 생성기를 사용하여 각 항목을 추가하므로 걱정할 필요가 없습니다.
>>> lst2.extend(item[0] for item in lst)
>>> lst2
[1, 2, 3, 'a', 1, 'x']
또는
>>> lst2 + [x[0] for x in lst]
[1, 2, 3, 'a', 1, 'x']
>>> lst2
[1, 2, 3]
https://docs.python.org/3.4/tutorial/datastructures.html#more-on-lists https://docs.python.org/3.4/tutorial/datastructures.html#list-comprehensions
append
질문 의 단어 가 혼란을 초래 한다고 생각합니다 . 그것은 단순히 솔루션의 목록 이해 부분을 원하는 것처럼 들립니다.