【问题标题】:Index CSV columns based on pattern基于模式索引 CSV 列
【发布时间】:2014-06-14 00:00:40
【问题描述】:

如何从包含特定模式的列中获取索引?

例如,假设我想在这个字符串中索引哪些列包含#E

,#E,D,,#E,,#,,#E,,,21#E,,#,,#DD,sd,,#,,##,

我想要这样的结果:

 [1, 4, 8, 11]

到目前为止,我很困惑:

string = ',#E,D,,#E,,#,,#E,,,21#E,,#,,#DD,sd,,#,,##,'
new_string = re.sub('[^,#E]', '', string)
def positions(string, char):
    string_original = string
    list = []
    for i in range(0, len(string)):
        if string[i] == char:
            list = list + [i]
            string = string_original[i + 1:]
    return list

【问题讨论】:

  • 逗号之间是否有诸如#E,,#, 之类的内容,或者是确切的格式?
  • 感谢您的自发回复。 “有”东西,但我删除了它们。

标签: python string csv replace indexing


【解决方案1】:
  1. 拆分“,”以获取值列表而不是字符串
  2. 使用列表推导遍历传递给 enumerate 的列表,该列表返回一个元组列表,例如 [(0, "first string"), (1, "second string") ..]
  3. 过滤包含您的字符串的元素并将索引放入列表中

假设你的字符串包含列:

matches = [i for i,x in enumerate(yourstring.split(',')) if "#E" in x]

【讨论】:

    【解决方案2】:

    不确定我明白了,但这里有一个想法:

    1. 将字符串按, 分割得到字符串列表
    2. 选择与列表中的字符串(例如#E)匹配的索引

    >>> s = ',#E,D,,#E,,#,,#E,,,21#E,,#,,#DD,sd,,#,,##,'
    >>> l = s.split(',')
    >>> [i for i in range(len(l)) if '#E' in l[i]]
    [1, 4, 8, 11]
    

    >>> filter(lambda i: '#E' in l[i], range(len(l)))
    [1, 4, 8, 11]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-09-06
      • 2021-08-24
      • 1970-01-01
      • 2018-04-03
      • 1970-01-01
      • 1970-01-01
      • 2019-05-23
      • 2016-08-01
      相关资源
      最近更新 更多