【问题标题】:two loops together in pythonpython中的两个循环在一起
【发布时间】:2015-01-30 15:40:36
【问题描述】:

文件

sims 10 500
dettol 45 200
nims 200 540

代码:

for E, w in vb, T.readline():
    name, qty, price = w.split()
    print("you bought" + str(vb[E]) + "from" + name)

说明

我想同时运行两个循环,一个用于文件,一个用于数组。此外,每次迭代的预期输出将是

>>> "you bought 1 from nims"

如果“nims”有 1 个数量。

我以前喜欢做

for i, k in j, T.readline:

但它不起作用。

【问题讨论】:

  • j 是什么?你能添加你想要的输出的可读格式吗?
  • 我猜你正在寻找类似zip的东西?
  • 你的问题质量很低。我第二个先生/女士懒惰地把你指向zip,使用模式类似于for element, line in zip(my_list, my_file_object): --- 也就是说,我必须警告你,如果str(vb[E]) 符合你的期望,我会感到非常惊讶。

标签: python python-2.7 python-3.x


【解决方案1】:

您尚未阐明 vb 是什么,但我认为该循环并没有像您认为的那样做。首先,这是解释器的样子:

for E, w in (vb, T.readline()):

这不会占用vb 的每个元素和T 的每一行。相反,它将采用vb 并尝试将其解压缩为Ew,然后在第二次迭代中对T.readline() 执行相同的操作。例如:

>>> a = (1, 2)
>>> b = (5, 6)
>>> for i, j in a, b: print(i, j)

1 2
3 4

请注意,它不会打印ab 的第0 个元素,而是a 的两个元素后跟b 的两个元素。如果你想组合它们,你可以使用zip:

>>> for i, j in zip(a, b): print(i, j)

1 3
2 4

最后,T.readline() 你使用它的方式不会给你T 的每一行。相反,它将获取T 中的第一行(假设您在循环之前没有阅读其他行)并遍历该行的字符。

【讨论】:

    【解决方案2】:

    您可能正在寻找zip

    with open("test") as T:
        vb = [1, 2, 3]
        for E, w in zip(vb, T):
            name, qty, price = w.split()
            print("you bought {}  from {}".format(E, name))
    

    另请注意,您的代码中还有另外两个错误:

    • 您想迭代文件T 中的所有行,而不是第一个T.readline() 中的字母
    • E 已经是列表中的元素,而不是该元素的索引

    请注意,在 Python 2.x 中,zip 将一次性使用整个文件,因此如果该文件非常大,您可能希望使用 itertools.izip 代替,这会创建一个迭代器。在 Python 3.x 中,zip 本身就是一个迭代器。

    【讨论】:

      【解决方案3】:

      除了payhima的asnwer,你或许可以考虑使用enumerate()比如

      for i,line in enumerate(T):
          print i, line
      

      假设 T 是您的文件名。这将打印

      0 sims 10 500
      1 dettol 45 200
      2 nims 200 540
      

      这是你想要的吗?

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-11-13
        • 1970-01-01
        • 1970-01-01
        • 2014-01-21
        • 2022-12-01
        • 1970-01-01
        • 2013-03-22
        • 2023-03-04
        相关资源
        最近更新 更多