Python에서 각 하위 목록의 첫 번째 항목 추출
목록 목록에서 각 하위 목록의 첫 번째 항목을 추출하여 새로운 목록에 추가하는 방법이 무엇인지 궁금합니다.그렇다면 다음과 같은 것이 있습니다.
lst = [[a,b,c], [1,2,3], [x,y,z]]
그리고, 나는 손을 떼고 싶습니다.a
,1
그리고.x
그 목록과 별도의 목록을 만듭니다.
노력했습니다.
lst2.append(x[0] for x in lst)
목록 이해력 사용:
>>> lst = [['a','b','c'], [1,2,3], ['x','y','z']]
>>> lst2 = [item[0] for item in lst]
>>> lst2
['a', 1, 'x']
zip:
>>> lst=[[1,2,3],[11,12,13],[21,22,23]]
>>> zip(*lst)[0]
(1, 11, 21)
또는 파이썬 3의 경우zip
목록을 생성하지 않습니다.
>>> 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])
동일한 문제가 발생하여 각 솔루션의 성능에 대해 궁금했습니다.
여기 있습니다.%timeit
:
import numpy as np
lst = [['a','b','c'], [1,2,3], ['x','y','z']]
첫번째 눔피 방식, 배열 변형:
%timeit list(np.array(lst).T[0])
4.9 µs ± 163 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)
목록 이해를 사용하는 완전 네이티브(@alexe):
%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)
두번째 눔피웨이.@dawg에서도 설명:
%timeit list(np.array(lst)[:,0])
4.95 µs ± 179 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)
놀랍게도(적어도 저에게는) 목록 이해를 사용하는 네이티브 방식이 눔피 방식보다 가장 빠르고 약 10배 빠릅니다.결승전 없이 두 개의 너피웨이를 달리는 것.list
아직 10배 차이가 나는 µ를 한 개 정도 저장합니다.
각 코드 조각을 에워싸면 다음으로 호출됩니다.len
, 제너레이터가 끝까지 작동되도록 하기 위해 타이밍은 그대로 유지되었습니다.
파이썬은 아이템게터(itemgetter)라는 함수를 포함하여 목록의 특정 인덱스에서 아이템을 반환합니다.
from operator import itemgetter
검색할 항목의 인덱스를 item getter() 함수로 전달합니다.첫 번째 항목을 검색하려면 항목 getter(0)를 사용합니다.이해해야 할 중요한 점은 아이템게터(0) 자체가 함수를 반환한다는 것입니다.해당 기능에 목록을 전달하면 특정 항목이 표시됩니다.
itemgetter(0)([10, 20, 30]) # Returns 10
이것은 첫 번째 인수로 함수를 사용하고 두 번째 인수로 목록(또는 다른 반복 가능한 모든 변수)을 사용하는 맵(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])을 사용하면 생성기 개체가 반환됩니다.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']
제가 틀렸다면 알려주시기 바랍니다.
lst = [['a','b','c'], [1,2,3], ['x','y','z']]
outputlist = []
for values in lst:
outputlist.append(values[0])
print(outputlist)
:['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를 사용합니다.이 경우, 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
다음과 같이 목록 목록에서 첫 번째 값을 새 목록으로 추출할 수 있습니다.
list_of_lists = [
['John', 'Anna'], [36, 24], ['Male', 'Female']
]
new_list = [list[0] for list in list_of_lists] # Here
print(new_list) # ['John', 36, 'Male']
제가 제안할 수 있는 다른 대답은
lst = [['a','b','c'], [1,2,3], ['x','y','z']]
new_lst=[lst[0][0],lst[1][0],lst[2][0]]
print(new_lst)
출력은 다음과 같습니다.
['a', 1, 'x']
도움이 되길 바랍니다!감사합니다!
언급URL : https://stackoverflow.com/questions/25050311/extract-first-item-of-each-sublist-in-python
'programing' 카테고리의 다른 글
PL/SQL의 시프트 연산자 (0) | 2023.10.03 |
---|---|
EFcore를 사용하여 MariaDB에서 자동 증분 int 열 생성 (0) | 2023.10.03 |
fancy box2 / fancy box는 페이지가 상단으로 점프하게 합니다. (0) | 2023.10.03 |
인식할 수 없는 특성 이름 MODULE(class com.sun.tools.javac.util)입니다.SharedNameTable$NameImppl) (0) | 2023.09.28 |
MySQL 데이터베이스에 DECIAL을 삽입하는 방법 (0) | 2023.09.28 |