[我知道这是一个初学者的问题,但是我们都必须从某个地方开始(是的,我确实浏览过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
我怎么会误以为将列表变成元组?写这个的正确方法是什么?
提前感谢。
当您使用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}')
如果要sayHelloTo
在列表中包含全名。您可以尝试以下代码。
sayHelloTo = map(lambda pair: pair[0] + " " + pair[1], zip(firstName, lastName))
我认为误解的是拉链创建了一对物品。
您可以将元组作为print
的可迭代参数解包:
for i in sayHelloTo:
print('Hello', *i)
此输出:
Hello Charles Manley
Hello Steve Perry
Hello Mary Shelly
这正是您想要的:
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
您需要用以下内容替换打印行:
print('Hello ' + ' '.join(i))
无需在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}')