使用Python 3.4.2中的.format打印多个列表

时间:2017-09-06 11:28:06

标签: python-3.x

任何人都可以解释我在Python 3.4.2中遇到的这个问题吗?

我有两个列表,我想使用.format()打印每个列表中的特定项目。这是代码:

names=["Conan", "Belit", "Valeria"]
ages=[25, 21, 22]

print("{0} is {1} years old. Whereas {1} is {0} years old.".format(*names, *ages))

我的印象是,要在列表中调用特定项目,需要使用* listname。它适用于个人名单:

print("{0}".format(*names))

但是当我打电话给多个名单时呢?我已经尝试了两个带星号的列表名称,两者都没有,加号等等没有运气。我似乎得到的是各种语法错误等等?

我需要做的就是打印:

  柯南今年21岁。而贝利特已经25岁了。

有什么想法吗?

提前致谢。我似乎无法绕过这一个。

1 个答案:

答案 0 :(得分:0)

Python 3.5中添加了

Additional Unpacking,因此您无法在Python 3.4的函数调用中使用多个星号*。由于调用

,因此您也无法使用str.format
print("{0} is {1} years old. Whereas {1} is {0} years old.".format(*names, *ages))

就像用解压缩列表调用它一样:

print("{0} is {1} years old. Whereas {1} is {0} years old.".format(
    "Conan", "Belit", "Valeria", 25, 21, 22))

所以这打印:

Conan is Belit years old. Whereas Belit is Conan years old.

您只需传递两个列表,然后使用替换字段中字段名称后面的索引,例如: {0}表示传递给format的第一个arg(在这种情况下为names列表),{0[0]}将是列表中的第一个项目。

print("{0[0]} is {1[0]} years old. Whereas {0[1]} is {1[1]} years old.".format(
    names, ages))
# Or use keyword arguments.
print("{names[0]} is {ages[0]} years old. Whereas {names[1]} is {ages[1]} years old.".format(
    names=names, ages=ages))