【问题标题】:Find Nth item in comma separated list in Python在 Python 中查找逗号分隔列表中的第 N 个项目
【发布时间】:2014-12-23 02:35:03
【问题描述】:

我有一个大型 csv,其中包含不同长度的逗号分隔行。对另一组数据进行排序,我在循环中使用split(',') 来分隔字段,但这种方法要求每行具有相同数量的条目。有没有办法可以查看一行,并且与条目总数无关,只需拉出第 N 个项目?作为参考,我使用的方法仅适用于看起来像 AAA,BBB,CCC,DDD 的行

entry = 'A,B,C,D'

(a,b,c,d) = entry.split(',')
print a,b,c,d

但我想拉 A 和 C,即使它看起来像 A,B,C,D,E,F 或 A,B,C

【问题讨论】:

    标签: python sorting line comma


    【解决方案1】:

    使用列表而不是单独的变量。

    values = entry.split(',')
    print values[0], values[2]
    

    【讨论】:

      【解决方案2】:

      只需使用一个列表:

      xyzzy = entry.split(",");
      print xyzzy[0], xyzzy[2]
      

      但请注意,一旦您允许可变元素计数的可能性,您可能最好允许太少:

      entry = 'A,B'
      xyzzy = entry.split(",");
      (a,c) = ('?','?')
      if len(xyzzy) > 0: a = xyzzy[0]
      if len(xyzzy) > 2: c = xyzzy[2]
      
      print a, c
      

      【讨论】:

        【解决方案3】:

        如果你不想索引结果,编写自己的函数来处理值太少或两个很多的情况并不难。虽然设置需要多几行代码,但优点是您可以为结果提供有意义的名称,而不是像results[0]results[2]这样的匿名名称。

        def splitter(s, take, sep=',', default=None):
            r = s.split(sep)
            if len(r) < take:
               r.extend((default for _ in xrange(take - len(r))))
            return r[:take]
        
        entry = 'A,B,C'
        a,b,c,d = splitter(entry, 4)
        print a,b,c,d  # --> A B C None
        
        entry = 'A,B,C,D,E,F'
        a,b,c,d = splitter(entry, 4)
        print a,b,c,d  # --> A B C D
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-12-31
          • 2012-01-10
          • 1970-01-01
          • 2022-01-07
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多