元组我下面TreeHouse元组教程为Python 3的名单,我得到这个错误在下面的代码: 没有得到正确的输出,用于创建给定两个列表
def combo(iter1, iter2):
ltup = []
for a in iter1:
for b in iter2:
ltup.append(tuple([a, b]))
return ltup
我应该如何解决它,为什么我的解决方案错了?
元组我下面TreeHouse元组教程为Python 3的名单,我得到这个错误在下面的代码: 没有得到正确的输出,用于创建给定两个列表
def combo(iter1, iter2):
ltup = []
for a in iter1:
for b in iter2:
ltup.append(tuple([a, b]))
return ltup
我应该如何解决它,为什么我的解决方案错了?
你不需要嵌套循环。尝试这种代码:
def combo(iter1, iter2):
ltup = []
for a,b in zip(iter1, iter2):
ltup.append((a, b))
return ltup
print combo([1,2,3],[3,2,1])
或者另一个最短变型中,我想: zip(iter1, iter2)
[(1,3),(2,2),(3,1)]
好吧,你的回答是正确的,但我很难跟着它!你能否提供更多解释? –
当你使用嵌套循环时,你为所有列表对创建元组。即,对于我的列表,您将获得:[(1,3),(1,2),(1,1),(2,3),(2,2),(2,1),(3,3 ),(3,2),(3,1)]。然而,你只需要结合第一个元素,然后秒等等。关于'zip'在这里阅读:https://docs.python.org/2/library/functions.html#zip – Serenity
我已经接受了这个答案,但是我真的很难跟上。zip(iter1,iter2)适用于我的shell,但不适用于树屋挑战,但您的答案适用于此)。谢谢 –
您可以使用zip
来获得答案。
a = [1,2,3]
b = [4,5,6]
ans = zip(a,b)
[(1, 4), (2, 5), (3, 6)]
你只需要zip
那些iterables在一起:
该函数返回的元组,其中包含
i-th tuple
从每个参数序列或iterables的i-th
元素的list
。返回的列表的长度被截断为最短参数序列的长度。
因为您的可迭代数据具有相同的长度,所以应该按照您的预期工作。
def combo(iter1, iter2):
return zip(iter1, iter2)
UPDATE:为Python 3
只是为了完整性起见,它不是在正在使用Python版本的问题中提到。如果你正在使用python3,然后zip
将返回一个可迭代的,所以你需要将其转换为明确列出:
def combo(iter1, iter2):
return list(zip(iter1, iter2))
请查看最新的问题。 'zip'不起作用 –
我不明白。在'Bummer'错误中,看起来第一个项目的预期输出和生成输出都是相同的'(10,'T')',但它仍然表示它们不匹配? – AKS
是啊,如果你尝试我说的代码。不幸的是,树中的错误不是很具描述性,但教程很棒! –
下工作太(其他的答案中缺少将其转换为一个列表):
def combo(iter1, iter2):
return list(zip(iter1, iter2))
看看我更新的答案。我已经添加了一些解释,为什么你需要明确地将它转换为'list'。 – AKS
在Python 3.x中使用'list(zip(seq1,seq2))''zip'是懒惰的,它会返回生成器而不是列表。在线检查器可以运行返回类型断言。 –