튜플 목록에서 첫 번째 요소를 얻는 방법은 무엇입니까?
아래에 첫 번째 요소가 id이고 다른 요소가 문자열 인 목록이 있습니다.
[(1, u'abc'), (2, u'def')]
다음과 같이이 튜플 목록에서만 ID 목록을 만들고 싶습니다.
[1,2]
이 목록을 사용 __in
하므로 정수 값 목록이어야합니다.
>>> a = [(1, u'abc'), (2, u'def')]
>>> [i[0] for i in a]
[1, 2]
zip 기능을 사용하여 요소를 분리하십시오.
>>> inpt = [(1, u'abc'), (2, u'def')]
>>> unzipped = zip(*inpt)
>>> print unzipped
[(1, 2), (u'abc', u'def')]
>>> print list(unzipped[0])
[1, 2]
편집 (@BradSolomon) : 위는 Python 2.x에서 작동하며 여기서 zip
목록을 반환합니다.
Python 3.x에서는 zip
반복자를 반환하며 다음은 위와 같습니다.
>>> print(list(list(zip(*inpt))[0]))
[1, 2]
이 같은 것을 의미합니까?
new_list = [ seq[0] for seq in yourlist ]
실제로 가지고있는 것은 tuple
세트 목록이 아닌 객체 목록입니다 (원래 질문이 암시 한 것처럼). 실제로 세트 목록 인 경우 세트에 순서가 없기 때문에 첫 번째 요소 가 없습니다.
여기서는 일반적으로 1 요소 튜플 목록을 만드는 것보다 더 유용하기 때문에 플랫 목록을 만들었습니다. 그러나, 당신은 쉽게 바로 교체하여 1 개 요소 튜플의 목록을 만들 수 있습니다 seq[0]
로 (seq[0],)
.
"튜플 포장 풀기"를 사용할 수 있습니다.
>>> my_list = [(1, u'abc'), (2, u'def')]
>>> my_ids = [idx for idx, val in my_list]
>>> my_ids
[1, 2]
반복시 각 튜플의 압축이 풀리고 해당 값이 변수 idx
및 로 설정됩니다 val
.
>>> x = (1, u'abc')
>>> idx, val = x
>>> idx
1
>>> val
u'abc'
이것은 무엇 operator.itemgetter
을위한 것입니다.
>>> a = [(1, u'abc'), (2, u'def')]
>>> import operator
>>> b = map(operator.itemgetter(0), a)
>>> b
[1, 2]
itemgetter
문은 함수 반환 지정한 요소의 인덱스를 반환합니다. 글쓰기와 똑같습니다
>>> b = map(lambda x: x[0], a)
그러나 나는 그것이 itemgetter
더 명확하고 더 명백 하다는 것을 안다 .
이것은 간단한 정렬 문장을 만드는 데 편리합니다. 예를 들어
>>> c = sorted(a, key=operator.itemgetter(0), reverse=True)
>>> c
[(2, u'def'), (1, u'abc')]
python3.X의 성능 관점에서
[i[0] for i in a]
그리고list(zip(*a))[0]
동등하다- they are faster than
list(map(operator.itemgetter(0), a))
Code
import timeit
iterations = 100000
init_time = timeit.timeit('''a = [(i, u'abc') for i in range(1000)]''', number=iterations)/iterations
print(timeit.timeit('''a = [(i, u'abc') for i in range(1000)]\nb = [i[0] for i in a]''', number=iterations)/iterations - init_time)
print(timeit.timeit('''a = [(i, u'abc') for i in range(1000)]\nb = list(zip(*a))[0]''', number=iterations)/iterations - init_time)
output
3.491014136001468e-05
3.422205176000717e-05
if the tuples are unique then this can work
>>> a = [(1, u'abc'), (2, u'def')]
>>> a
[(1, u'abc'), (2, u'def')]
>>> dict(a).keys()
[1, 2]
>>> dict(a).values()
[u'abc', u'def']
>>>
when I ran (as suggested above):
>>> a = [(1, u'abc'), (2, u'def')]
>>> import operator
>>> b = map(operator.itemgetter(0), a)
>>> b
instead of returning:
[1, 2]
I received this as the return:
<map at 0xb387eb8>
I found I had to use list():
>>> b = list(map(operator.itemgetter(0), a))
to successfully return a list using this suggestion. That said, I'm happy with this solution, thanks. (tested/run using Spyder, iPython console, Python v3.6)
Those are tuples, not sets. You can do this:
l1 = [(1, u'abc'), (2, u'def')]
l2 = [(tup[0],) for tup in l1]
l2
>>> [(1,), (2,)]
참고URL : https://stackoverflow.com/questions/12142133/how-to-get-first-element-in-a-list-of-tuples
'IT박스' 카테고리의 다른 글
Bash에서 정규 표현식과 문자열을 어떻게 일치시킬 수 있습니까? (0) | 2020.06.20 |
---|---|
자바 : 정수와 == (0) | 2020.06.20 |
Java에서 'public static void'는 무엇을 의미합니까? (0) | 2020.06.20 |
"Java DateFormat은 스레드 안전하지 않습니다"이것이 무엇을 야기합니까? (0) | 2020.06.20 |
PHP를 사용하여 한 디렉토리에서 다른 디렉토리로 파일을 복사하는 방법은 무엇입니까? (0) | 2020.06.20 |