python - 与内联相比,for 循环中元组拆包的行为

标签 python

我有一个非常简单的文本文件,为了这个例子的目的,它包含一个商店列表以及相应的消费金额。 (制表符间距)文件如下所示:

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/

相关文章:

python - cv2 方法的解释结果 : phaseCorrelate? | python

python - 如何使用 Python 和 xarray 从变量满足 netCDF 数据集标准的位置提取坐标?

python - 更新标签时泄漏

python - ipython事后调试: scope of outer function

python - numpy.take 和 numpy.choose 有什么区别?

python - 使用 Python 将电子邮件的主题和正文提取到字典中

python - PyQt:使用 QDataStream 保存 native QTreeWidgets

python - 将带空格的 Python 十六进制输出送入已编译的 C 文件

python - Django中用于投票应用程序的数据库结构

python - 何时在单热编码 ML 工作负载中使用暗阵列与 dask 数据帧