다음을 달성하기위한 Pythonic 접근법은 무엇입니까?
# Original lists:
list_a = [1, 2, 3, 4]
list_b = [5, 6, 7, 8]
# List of tuples from 'list_a' and 'list_b':
list_c = [(1,5), (2,6), (3,7), (4,8)]
의 각 구성원은 list_c
튜플이며, 첫 번째 구성원은 출신 list_a
이고 두 번째 구성원은 출신 입니다 list_b
.
답변
파이썬 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)]
답변
파이썬 3.0에서 zip은 zip 객체를 반환합니다. 를 호출하여 목록에서 목록을 얻을 수 있습니다 list(zip(a, b))
.
답변
맵 람다를 사용할 수 있습니다
a = [2,3,4]
b = [5,6,7]
c = map(lambda x,y:(x,y),a,b)
원본 목록의 길이가 일치하지 않는 경우에도 작동합니다
답변
내장 함수 zip을 찾고 있습니다.
답변
이것이 파이썬 방식인지 아닌지는 확실하지 않지만 두 목록에 같은 수의 요소가있는 경우 단순 해 보입니다.
list_a = [1, 2, 3, 4]
list_b = [5, 6, 7, 8]
list_c=[(list_a[i],list_b[i]) for i in range(0,len(list_a))]
답변
나는 이것이 오래된 질문이라는 것을 알고 이미 대답했지만 어떤 이유로 든 여전히이 대안 솔루션을 게시하고 싶습니다. 필요한 “마법”을 수행하는 내장 함수를 찾는 것이 쉽지만, 스스로 할 수 있다는 것을 아는 것은 아프지 않습니다.
>>> 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')]
답변
문제 설명에 표시된 출력은 튜플이 아니라 목록입니다.
list_c = [(1,5), (2,6), (3,7), (4,8)]
확인
type(list_c)
list_a 및 list_b에서 결과를 튜플로 원한다고 생각하면
tuple(zip(list_a,list_b))