1

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

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

4 回答 4

2

您可以使用列表组合:

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']]
于 2013-10-26T22:02:24.443 回答
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']]
>>>

其中的重要部分是列表理解str.split.

于 2013-10-26T22:04:15.380 回答
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]
于 2013-10-26T21:59:56.123 回答
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']]
于 2013-10-26T22:06:01.530 回答