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

それのためだけに理解ソリューションをリストします。

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 に答える