我有一个嵌套的字符串列表:
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))]
答案 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 comprehension和str.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']]