2016-05-30 66 views
1

元组我下面TreeHouse元组教程为Python 3的名单,我得到这个错误在下面的代码: enter image description here没有得到正确的输出,用于创建给定两个列表

def combo(iter1, iter2): 
    ltup = [] 
    for a in iter1: 
     for b in iter2: 
      ltup.append(tuple([a, b])) 
    return ltup 

enter image description here

我应该如何解决它,为什么我的解决方案错了?

我用zip并没有通过挑战: enter image description here

+0

在Python 3.x中使用'list(zip(seq1,seq2))''zip'是懒惰的,它会返回生成器而不是列表。在线检查器可以运行返回类型断言。 –

回答

1

你不需要嵌套循环。尝试这种代码:

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)]

+0

好吧,你的回答是正确的,但我很难跟着它!你能否提供更多解释? –

+0

当你使用嵌套循环时,你为所有列表对创建元组。即,对于我的列表,您将获得:[(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

+0

我已经接受了这个答案,但是我真的很难跟上。zip(iter1,iter2)适用于我的shell,但不适用于树屋挑战,但您的答案适用于此)。谢谢 –

2

您可以使用zip来获得答案。

a = [1,2,3] 
b = [4,5,6] 
ans = zip(a,b) 
[(1, 4), (2, 5), (3, 6)] 
2

你只需要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)) 
+0

请查看最新的问题。 'zip'不起作用 –

+1

我不明白。在'Bummer'错误中,看起来第一个项目的预期输出和生成输出都是相同的'(10,'T')',但它仍然表示它们不匹配? – AKS

+0

是啊,如果你尝试我说的代码。不幸的是,树中的错误不是很具描述性,但教程很棒! –

1

下工作太(其他的答案中缺少将其转换为一个列表):

def combo(iter1, iter2): 
    return list(zip(iter1, iter2)) 
+0

看看我更新的答案。我已经添加了一些解释,为什么你需要明确地将它转换为'list'。 – AKS

相关问题