返回元组成字符串,为什么只返回元组列表的第一个索引?

时间:2020-06-24 01:00:33

标签: python

如何将所有元素都包含在元组列表中?

def convert(list_tup):
    for a,b,c in list_tup:
        return c + ' ' + a + ' ' + b

strings = [('w', 'x','2'), ('y', 'z', '3')]
print(convert(strings))

输出为:2 w x 它只返回元组列表的第一个索引

这是我使用print(c + ' ' + a + ' ' + b)

时的预期输出

预期输出:

2 w x 
3 y z

还有一种方法可以分隔字符串而无需在返回c + ' ' + a + ' ' + b中使用字符串空间 就像sep = ' '

4 个答案:

答案 0 :(得分:2)

方法如下:

def convert(list_tup):
    
    return '\n'.join([' '.join((tup[-1],)+tup[:-1]) for tup in list_tup])

strings = [('w','x','2'), ('y', 'z', '3')]

print(convert(strings))

输出:

2 w x
3 y z

答案 1 :(得分:2)

之所以只得到“ 2 w x”,是因为在for循环中有一个return语句。在第一次迭代中,它从函数返回。

您可以直接在for循环中包含打印内容。另外,您可以使用逗号(,)代替' '

def convert(list_tup):
    for a,b,c in list_tup:
        print(c, a, b)

strings = [('w', 'x','2'), ('y', 'z', '3')]
convert(strings)

答案 2 :(得分:1)

发生这种情况的原因是此行:

return c + ' ' + a + ' ' + b

您正在使函数在第一个return之后进入iteration

您可以结合使用list comprehensionf strings来做我想做的事情。

尝试一下:

def convert(list_tup):
    return [f'{c} {a} {b}' for a,b,c in list_tup]

strings = [('w', 'x', '2'), ('y', 'z', '3')]

for string in convert(strings):
    print(string)

答案 3 :(得分:1)

您不能将return放入循环中并期望它重复返回值-一旦它返回第一个值,函数就结束了。但是,如果您尝试生成一个值序列,则可以使用yield而不是return轻松地将其转换为generator函数。然后,当您调用函数时,将获得一个对象,可以对其进行迭代以获取值的序列。例如:

def convert(list_tup):
    for a,b,c in list_tup:
        yield c + ' ' + a + ' ' + b

strings = [('w', 'x','2'), ('y', 'z', '3')]
for s in convert(strings):
    print(s)

给予

2 w x
3 y z

例如,您可以使用list遍历这些值并将它们放入列表中:

print(list(convert(strings)))
['2 w x', '3 y z']