【问题标题】:Working with enumerate使用枚举
【发布时间】:2014-03-10 20:40:39
【问题描述】:

所以我最近几天才开始使用 python,除了一些 5 年前的基本编码知识。 我恋爱了。

我正在导入一个 .csv,其中包含按 dyad 排序的历史联盟...所以每个联盟都有一个特殊编号。同一国家/地区的文件中还有更多。 我试图让用户给出一个国家和日期,并能够返回他们当年与之结盟的国家。 这是一行数据。

6 200 United Kingdom 255 Germany 1 1 1816 31 10 1822 1 0 1 0 0  1 0
6 200 United Kingdom 300 Austria-Hungary 1 1 1816 31 10 1822 1 0 1 0 0 1 0

第一个数字是 dyad num,然后是国家代码和国家,国家代码和国家,联盟开始日,月,年,结束日,月,年。 最后的部分并不重要。

import csv
name='United Kingdom'
diad = [' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ']
with open('list.csv') as inputfile:
    r = list(csv.reader(inputfile))
    for i, j in enumerate(r):
         if j == name:
              diad[0]=name
          print "true"
              diad.insert(0, name)

我运行它并没有得到任何东西,所以 if 语句不正确...... 我不明白怎么做。您正在查看前两行数据,不应该枚举 find 任何“United Kingdom”实例并将它找到的内容插入到 diad 列表中吗?如果我能完成这件作品,我的任务应该很容易。

【问题讨论】:

  • Python 使用空格来表示代码块。确保你是一致的。通常首选使用四个空格作为缩进,并且从不使用制表符。您似乎正在使用print 行上的选项卡
  • 不知道为什么会这样,我会编辑它。
  • 如果我没看错... r 是一整行。你想要enumerate(r.split())...

标签: python enumerate


【解决方案1】:

遍历 CSV 遍历 ,而不是列。所以在每次迭代中,j 是一个列列表。然后,您还需要遍历 j 中的元素,以便与您的字符串进行比较。

我认为您对 enumerate 的作用感到困惑。事实上,你根本不需要它。它的作用是为您提供一个索引以及您正在枚举的事物的价值。所以在这种情况下,你会在第一次迭代中得到 0 加上第一行,然后 1 加上第二行,依此类推。由于您没有使用索引,因此您不想使用枚举。

【讨论】:

  • 由于 .csv 是结构化的,您可能只需检查特定“国家/地区”索引中的 name(此处看起来像 2 和 4),而不是检查行中的所有列。如果 csv 有标题,那么可以通过标题名称而不是索引来搜索这两个字段。
  • 这是一篇糟糕的代码。这是测试代码或其他东西,我无法解释。但是谢谢,我刚刚意识到 j[0] 会为上面的数据返回 6, 6 。基本上我手动将每个国家命名为一个类,设置一个名称属性......比如 United_Kingdom = country("United_Kingdom")
  • 然后(在类中的 init 内)遍历导入的列表以与名称发生冲突,然后将 dyad num 添加到该国家/地区的 dyads 列表中。 ..但是这个答案有帮助,谢谢。希望将来有更好的问题。
  • 万一有人读到这个...stackoverflow.com/questions/5466618/…这也有帮助。
猜你喜欢
  • 1970-01-01
  • 2012-01-30
  • 2012-11-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多