답변:
파이썬 2에서 :
>>> list_a = [1, 2, 3, 4]
>>> list_b = [5, 6, 7, 8]
>>> zip(list_a, list_b)
[(1, 5), (2, 6), (3, 7), (4, 8)]
파이썬 3에서 :
>>> list_a = [1, 2, 3, 4]
>>> list_b = [5, 6, 7, 8]
>>> list(zip(list_a, list_b))
[(1, 5), (2, 6), (3, 7), (4, 8)]
s/zip_longest()/izip_longest()
. Python 3.x에서로 이름이 변경되었습니다 zip_longest()
.
itertools.product()
것을 수행.
맵 람다를 사용할 수 있습니다
a = [2,3,4]
b = [5,6,7]
c = map(lambda x,y:(x,y),a,b)
원본 목록의 길이가 일치하지 않는 경우에도 작동합니다
map(None, a,b)
나는 이것이 오래된 질문이라는 것을 알고 이미 대답했지만 어떤 이유로 든 여전히이 대안 솔루션을 게시하고 싶습니다. 필요한 "마법"을 수행하는 내장 함수를 찾는 것이 쉽지만, 스스로 할 수 있다는 것을 아는 것은 아프지 않습니다.
>>> list_1 = ['Ace', 'King']
>>> list_2 = ['Spades', 'Clubs', 'Diamonds']
>>> deck = []
>>> for i in range(max((len(list_1),len(list_2)))):
while True:
try:
card = (list_1[i],list_2[i])
except IndexError:
if len(list_1)>len(list_2):
list_2.append('')
card = (list_1[i],list_2[i])
elif len(list_1)<len(list_2):
list_1.append('')
card = (list_1[i], list_2[i])
continue
deck.append(card)
break
>>>
>>> #and the result should be:
>>> print deck
>>> [('Ace', 'Spades'), ('King', 'Clubs'), ('', 'Diamonds')]
card
의는 if-elif
당신이이 이유가 필요하지 않습니다 continue
. (실제로, continue
당신이 없으면 당신은 목록을 변경할 필요가 없습니다 : 앞에서 언급 한 두 과제를 모두 유지 card = (list_1[i], '')
하고 card = ('', list_2[1])
각각해야합니다.)
문제 설명에 표시된 출력은 튜플이 아니라 목록입니다.
list_c = [(1,5), (2,6), (3,7), (4,8)]
확인
type(list_c)
list_a 및 list_b에서 결과를 튜플로 원한다고 생각하면
tuple(zip(list_a,list_b))
<map object at 0x000001F266DCE5C0>
나 <zip object at 0x000002629D204C88>
. 적어도 map 과 zip (단독) 에 대한 해결책은 불완전하거나 너무 복잡해 보입니다.
itertools
모듈은zip_longest()
가장 긴 목록의 끝에서 멈추고 누락 된 값을 매개 변수로 제공 한 값으로 채우는 메소드를 정의합니다 .