2

次のようなリストがあるとします。

[["BLAHBLAH\Desktop","BLAHBLAH\Documents","BLAHBLAH\Vids"],["BLAHBLAH\Pics","BLAHBLAH\Folder","BLAHBLAH\Music"]]

そして、次のような出力が必要でした

[["デスクトップ","ドキュメント","ビデオ"],["写真","フォルダ","音楽"]]

どうすればそうすることができますか?これは Python です。バックスラッシュで rfind を使用する必要があることはわかっていますが、ネストされたリスト構造を維持するためにネストされたリストを反復処理するのに問題があります

4

6 に答える 6

6

ファイル名が にある場合myList、これはそれを行う必要があり、プラットフォームに依存しません (異なる OS は異なるフォルダー区切りを使用しますが、os.path モジュールがそれを処理します)。

import os

[[os.path.basename(x) for x in sublist] for sublist in myList]
于 2012-06-07T19:20:37.040 に答える
3
lis=[["BLAHBLAH\Desktop","BLAHBLAH\Documents","BLAHBLAH\Vids"],["BLAHBLAH\Pics","BLAHBLAH\Folder","BLAHBLAH\Music"]]

def stripp(x):
    return x.strip('BLAHBLAH\\')

lis=[list(map(stripp,x)) for x in lis]
print(lis)                   

出力:

[['Desktop', 'Documents', 'Vids'], ['Pics', 'Folder', 'Music']]
于 2012-06-07T19:26:50.607 に答える
2

You should use list comprehensions:

NestedList = [["BLAHBLAH\Desktop","BLAHBLAH\Documents","BLAHBLAH\Vids"],["BLAHBLAH\Pics","BLAHBLAH\Folder","BLAHBLAH\Music"]]
output = [[os.path.basename(path) for path in li] for li in NestedList]
于 2012-06-07T19:23:28.663 に答える
1

答えの数は素晴らしいです。それらはすべて異なるコンテキストで機能します。私はこれをリストに追加しています:

outer = [["BLAHBLAH\Desktop","BLAHBLAH\Documents","BLAHBLAH\Vids"],
         ["BLAHBLAH\Pics","BLAHBLAH\Folder","BLAHBLAH\Music"]]

purged = [ [ item[ item.find("\\")+1: ]
             for item in inner ]
           for inner in outer ]

称賛(および+1)から

  • ファイル名ソリューションを最初に使用した@Junuxx、
  • これらがファイル名でない場合、より一般的な解決策を得た@Ashwini Chaudaryに、そして
  • 冗談を言っている@mfusenneggerに。
于 2012-06-07T19:34:08.060 に答える
1

このようなもの?

from unittest import TestCase
import re


def foo(l):
    result = []
    for i in l:
        if isinstance(i, list):
            result.append(foo(i))
        else:
            result.append(re.sub('.*\\\\', '', i))
    return result


class FooTest(TestCase):
    def test_foo(self):
        arg = ['DOC\\Desktop', 'BLAH\\FOO', ['BLAH\\MUSIC', 'BLABLA\\TEST']]
        expected = ['Desktop', 'FOO', ['MUSIC', 'TEST']]
        actual = foo(arg)
        self.assertEqual(expected, actual)
于 2012-06-07T19:29:28.750 に答える
0

Python atm を使用してコンピューターにアクセスすることはできませんが、次のように動作するはずです。

List=[["BLAHBLAH\Desktop","BLAHBLAH\Documents","BLAHBLAH\Vids"],["BLAHBLAH\Pics","BLAHBLAH\Folder","BLAHBLAH\Music"]]
final=[]
for varv in List:
    x=varv
    for sub_val in x:
        final.append(sub_val[sub_val.find("/"):])
于 2012-06-07T19:26:43.823 に答える