元组的麻烦

问题描述 投票:0回答:6

[我知道这是一个初学者的问题,但是我们都必须从某个地方开始(是的,我确实浏览过SO和YT)。

我写这个:

firstName = ['Charles', 'Steve', 'Mary']
lastName = ['Manley', 'Perry', 'Shelly']
fullName = zip(firstName, lastName)

sayHelloTo = fullName
for i in sayHelloTo:
     print('Hello ' + i)

希望得到这个:

Hello Charles Manley
Hello Steve Perry
Hello Mary Shelly

我怎么会误以为将列表变成元组?写这个的正确方法是什么?

提前感谢。

python list tuples
6个回答
2
投票

当您使用for i in sayHelloTo进行迭代时,您将在循环的每次迭代中将整个元组分配给变量i,因此您的print语句将打印“ Hello”和整个元组。

因为每个元组包含两个元素(名字和姓氏,要在打印语句中正确格式化元组的每个元素,您需要完全解开元组的包装,例如:

for first, last in sayHelloTo:
    print('Hello ' + first +" "+ last)

或使用f字符串简化打印语句:

for first, last in sayHelloTo:
    print(f'Hello {first} {last}')

0
投票

如果要sayHelloTo在列表中包含全名。您可以尝试以下代码。

sayHelloTo = map(lambda pair: pair[0] + " " + pair[1], zip(firstName, lastName))

我认为误解的是拉链创建了一对物品。


0
投票

您可以将元组作为print的可迭代参数解包:

for i in sayHelloTo:
    print('Hello', *i)

此输出:

Hello Charles Manley
Hello Steve Perry
Hello Mary Shelly

0
投票

这正是您想要的:

firstName = ['Charles', 'Steve', 'Mary']
lastName = ['Manley', 'Perry', 'Shelly']
fullName = zip(firstName, lastName)

for i,j in fullName:
    print("Hello {} {}".format(i,j))

打印:

Hello Charles Manley
Hello Steve Perry
Hello Mary Shelly

-1
投票

您需要用以下内容替换打印行:

print('Hello ' + ' '.join(i))

-1
投票

无需在for循环之前创建元组。您可以在运行时执行此操作。由于要使用元组,因此它包含两个值,因此需要两个变量才能将它们解包到for循环中。

尝试以下内容:

firstName = ['Charles', 'Steve', 'Mary']
lastName = ['Manley', 'Perry', 'Shelly']


sayHelloTo = fullName
for i,j in zip(firstName,lastName):
     print('Hello ' + i + ' ' +j)

如果您使用的是python 3+,则可以执行以下操作:

for i, j in zip(firstName, lastName):
    print (f'Hello {i} {j}')

© www.soinside.com 2019 - 2024. All rights reserved.