2014-01-28 4 views
2

2 요소 튜플 목록과 (터플이 아닌) 리터럴 목록이 있다고 가정합니다. 정수 : 더 이상이이미 추가 된 목록을 이미 압축 된 목록에 추가 할 수 있습니까?

zipped = zip((t[0] for t in a), (t[1] for t in a), b) 
assert zipped == [('x', 'a', 1), ('y', 'b', 2), ('z', 'c', 3)] 

내 현재 코드가 꽤 잘 작동하지만 나는 알고 싶어 :

a = [('x', 'a'), ('y', 'b'), ('z', 'c')] 
b = [1, 2 ,3] 

그리고 내가 좋아하는 아래의 코드 그래서 나는 세 가지 요소 튜플의 목록을 만들고 싶어 효율적이고 우아한 레시피 그러나 내 코드는 모든 튜플을 두 번 반복하고 압축을 풀어야합니다. 누구든지 조언을 해줄 수 있습니까?

답변

7

지능형리스트를 사용하여 튜플 풀기 : 루프 사용하지 않고

>>> a = [('x', 'a'), ('y', 'b'), ('z', 'c')] 
>>> b = [1, 2 ,3] 
>>> [(x,y,z) for (x,y), z in zip(a, b)] 
[('x', 'a', 1), ('y', 'b', 2), ('z', 'c', 3)] 

>>> a = [('x', 'a'), ('y', 'b'), ('z', 'c')] 
>>> b = [1, 2 ,3] 
>>> [x + (y,) for x, y in zip(a, b)] 
[('x', 'a', 1), ('y', 'b', 2), ('z', 'c', 3)] 
3

하나,

zip(*(zip(*a)+ [b])) 
+0

tuple''호출 할 필요 : * (ZIP'우편 ((* a) + [b]))'도 작동합니다. BTW, 이것은 Python 3.x에서 작동하지 않습니다. [Python 3.x의''zip'] (http://docs.python.org/3/library/functions.html#zip)은 list 대신 iterator를 반환합니다. – falsetru

+0

네, 맞습니다. 편집 됨. 감사. –

+0

3.x를 사용하지 않지만 list()를 사용하여 반복자를 list로 변환 할 수 있다고 가정합니다. 아마도 zip (* (list (zip (* a)) + [b]))이 거기에서 작동해야합니다. –

관련 문제