각 서브리스트의 첫 번째 아이템 추출
리스트에서 각 서브리스트의 첫 번째 아이템을 추출하여 새로운 리스트에 추가하는 방법이 무엇인지 궁금합니다.그렇다면, 다음과 같은 일이 있습니다.
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)
또는 Python 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']]
첫 번째 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(@syslogg에서 설명):
%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배 차이가 나는 약1개의 를 절약합니다.
각 코드 스니펫을 에워싸고 나서len제너레이터가 끝까지 실행되도록 하기 위해 타이밍은 그대로 유지되었습니다.
Python에는 목록의 특정 인덱스에서 항목을 반환하는 itemgetter라는 함수가 포함되어 있습니다.
from operator import itemgetter
가져올 항목의 인덱스를 itemgetter() 함수로 전달합니다.첫 번째 항목을 가져오려면 itemgetter(0)를 사용합니다.이해해야 할 중요한 것은 itemgetter(0) 자체가 함수를 반환한다는 것입니다.해당 함수에 목록을 전달하면 다음과 같은 특정 항목이 나타납니다.
itemgetter(0)([10, 20, 30]) # Returns 10
이것은 함수를 첫 번째 인수로, 목록(또는 기타 반복 가능한)을 두 번째 인수로 사용하는 map()과 결합할 때 유용합니다.반복 가능한 각 객체에 대해 함수를 호출한 결과를 반환합니다.
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[0] for x in lst]를 사용하면 목록이 반환됩니다.
목록 이해 출력을 목록에 추가하면 목록 이해 출력이 목록의 단일 요소가 됩니다.
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를 사용합니다.이 경우 생성기 추가에 대해 걱정할 필요가 없습니다. 익스텐드는 해당 생성기를 사용하여 생성된 각 항목을 추가하고 현재 목록을 확장하기 때문입니다.
>>> 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
제가 제안할 수 있는 다른 대답은
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
'programing' 카테고리의 다른 글
| NERDTree에서 숨김 파일(마침표부터 시작)을 표시하려면 어떻게 해야 합니까? (0) | 2023.04.15 |
|---|---|
| iOS 푸시 알림: 앱이 백그라운드에서 사용자가 알림을 눌렀는지 어떻게 감지합니까? (0) | 2023.04.15 |
| XAML의 부울 명령어파라미터 (0) | 2023.04.15 |
| 하나의 문장에서 여러 항목을 목록에서 제거하려면 어떻게 해야 합니까? (0) | 2023.04.15 |
| UITableView에서 빈 셀 사이의 구분 기호를 강제로 숨길 수 있습니까? (0) | 2023.04.15 |