【问题标题】:Python - Returning a substring of strings within a nested listPython - 在嵌套列表中返回字符串的子字符串
【发布时间】:2013-11-05 21:37:39
【问题描述】:

我有一个嵌套的字符串列表:

d =  [['one\\alpha','two\\beta','three\\gamma'],['foo\\data','bar\\params']]   

我想做的是给列表d返回一个列表:

data = [['alpha','beta','gamma'],['data','params']]                          

即遍历d中每个内部列表的每个元素,并返回\\之后的子字符串。

我的解决方案是:

data = []
for n in range(len(d)):
   for m in range(len(d[n])):
    a = str(d[n][m])
    data.append(a.split("\\")[1])

产生:data = ['alpha', 'beta', 'gamma', 'data', 'params']

它以正确的顺序生成正确的字符串,但我失去了列表 d 嵌套方式的性质。无论如何生成列表data 给定d 保持嵌套结构?

编辑:

我实际上只是设法解决了这个问题:

 [[d[n][m].split("\\")[1] for m in range(len(d[n]))] for n in range(len(d))]

【问题讨论】:

  • 很高兴你自己解决了这个问题......但是,它的可读性不是很强......你几乎不需要在对象长度上使用 range 来循环它
  • 感谢您的提示。一点一点学习Python。

标签: python string list substring


【解决方案1】:

这是我的看法:

>>> lst = [['one\\alpha','two\\beta','three\\gamma'],['foo\\data','bar\\params']]
>>> [[y.split('\\')[1] for y in x] for x in lst]
[['alpha', 'beta', 'gamma'], ['data', 'params']]
>>>

其中重要的部分是list comprehensionstr.split

【讨论】:

    【解决方案2】:

    列出理解解决方案只是为了它。

    d =  [['one\\alpha','two\\beta','three\\gamma'],['foo\\data','bar\\params']] 
    index_to_get = 1
    
    data = [
        list(values[index_to_get]) for values in (
            zip(*(string.split("\\") for string in nested_list))
            for nested_list in d
        )
    ]
    
    print(data)
    >> [['alpha', 'beta', 'gamma'], ['data', 'params']]
    

    【讨论】:

      【解决方案3】:

      您可以使用列表组合:

      d =  [['one\\alpha','two\\beta','three\\gamma'],['foo\\data','bar\\params']]  
      new = [[el.partition('\\')[2] for el in item] for item in d]
      # [['alpha', 'beta', 'gamma'], ['data', 'params']]
      

      【讨论】:

      • 使用分区方式和使用拆分方式有什么区别..?
      • 分区只拆分一次,如果没有找到分隔符,将保证第二次拆分为空字符串...当使用拆分时,并尝试获取一个元素,它可能会抛出一个IndexError当尝试访问它时(例如:'hello'.split('x')[1] 会中断)而使用分区时它不会,它只是空白
      【解决方案4】:

      您需要为输入列表中的每个列表使用一个列表:

      data = []
      for n in range(len(d)):
          sublist = []
          for m in range(len(d[n])):
              a = str(d[n][m])
              sublist.append(a.split("\\")[1])
          data.append(sublist)
      

      这给出了预期的结果:

      >>> data
      [['alpha', 'beta', 'gamma'], ['data', 'params']]
      

      您也可以使用列表推导来获得相同的结果:

      data = [[value.split('\\')[1] for value in item] for item in d]
      

      【讨论】:

        猜你喜欢
        • 2022-01-24
        • 1970-01-01
        • 1970-01-01
        • 2016-02-08
        • 1970-01-01
        • 2014-04-09
        • 2012-12-11
        • 2014-03-17
        • 2014-02-16
        相关资源
        最近更新 更多