Python - 在嵌套列表中返回字符串的子字符串

时间:2013-10-26 21:58:24

标签: python string list substring

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

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))]

4 个答案:

答案 0 :(得分:2)

您可以使用list-comp:

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']]

答案 1 :(得分:2)

这是我的看法:

>>> 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 :(得分:0)

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

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]

答案 3 :(得分:0)

仅仅为了它而列出理解解决方案。

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']]
相关问题