我有一个非常简单的文本文件,为了这个例子的目的,它包含一个商店列表以及相应的消费金额。 (制表符间距)文件如下所示:
7-Eleven 7.48
Paradies 28.00
Shoppers 68.26
我的目标是计算除 7-11 以外的所有人的总金额。我的代码如下所示:
price = 0.0
with open('stores.txt', 'r') as f:
for line in f:
line = line.strip('\n').split('\t')
for shop, priceStr in line:
if not shop == '7-Eleven':
price += float(priceStr)
可能可以进行一些简化来清理代码的中间部分,但我在处理“for shop, priceStr in line:”位时遇到了问题。我的理解是执行“shop, priceStr”应该将当前行的内容解包为一个元组并将它们分配给变量 shop 和 priceStr。但是,我收到错误:
ValueError: too many values to unpack
然而,如果我使用当前行并将其解包到循环之外,我会得到
shop, priceStr = line
print shop + ":" + priceStr
7-Eleven: 7.48
我不明白嵌套 for 循环和内联代码之间有什么不同。有人可以告诉我吗?此代码在 python2.7 和 python3.4 中运行相同
谢谢
最佳答案
在执行 line = line.strip('\n').split('\t')
之后,line 是一个包含两个元素的元组(假设没有多余的制表符,正如其他海报所指出的那样)出去)。如果您对此进行迭代,您将首先获得商店名称,然后是价格。所以,当你执行 for shop, priceStr in line:
时,它首先尝试将商店名称解包到你的两个变量中,然后尝试将价格解包到你的两个变量中;当然两次尝试都失败了。这里不需要迭代;您可以执行 shop, priceStr = line
将元组分成两个元素,或者保存一行代码并直接执行 shop, priceStr = line.strip('\n')。分割('\t')
关于python - 与内联相比,for 循环中元组拆包的行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40360868/