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



如何在元组列表中包含所有内容?

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 =' '

你只得到"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)

方法如下:

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

你不能把一个return放在循环中,并期望它重复返回值——一旦它返回第一个值,函数就完成了。 但是,如果您尝试生成一系列值,则可以通过使用yield而不是return轻松地将其转换为生成器函数。 然后,当你调用你的函数时,你会得到一个对象,你可以迭代它来获取值序列。 例如:

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

这是因为这一行:

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

您导致函数在第一次iterationreturn

你可以将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)

最新更新