パスのリストがあります。ここでは、類似しているが単純な文字列に簡略化しています。
paths = ['apple10/banana2/carrot1', 'apple10/banana1/carrot2', 'apple2/banana1', 'apple2/banana2', 'apple1/banana1', 'apple1/banana2', 'apple10/banana1/carrot1']
これらのパスは、番号順に並べ替える必要があります。最初の数字(アップル)が検索で最も重要で、次に2番目の数字が続きます。
明らかなかもしれない追加の複雑さの1つは、一部のパスにはデータが含まれる3番目のディレクトリがあり、他のパスにはないということです。
パス構造のMWEは次のようになります。
parent
|-----apple1
|------banana1
|----- data*
|------banana2
|----- data*
|-----apple2
|------banana1
|----- data*
|------banana2
|----- data*
|-----apple10
|------banana1
|-----carrot1
|-----data*
|-----carrot2
|-----data*
|------banana2
|----- carrot1
|-----data*
必要な出力は次のとおりです。
paths = ['apple1/banana1', 'apple1/banana2', 'apple2/banana1', 'apple2/banana2', 'apple10/banana1/carrot1', 'apple10/banana1/carrot2','apple10/banana2/carrot1']
私はこれを行う方法を見つけるのに苦労しています。数字は2桁になり、2の前に10が来るため、並べ替えは特に機能しません。
文字列のリスト内の単一の数値で機能する別の答えを見てきました。数字が入った文字列を正しく並べ替えるにはどうすればよいですか?私はこれを私の問題に適応させることができませんでした。
どんな援助でも大歓迎です。
パスからすべての数字を抽出するためsorted
に使用するカスタムキーを指定して、を試してください。re
import re
>>> sorted(paths, key=lambda x: list(map(int,re.findall("(\d+)", x))))
['apple1/banana1',
'apple1/banana2',
'apple2/banana1',
'apple2/banana2',
'apple10/banana1/carrot1',
'apple10/banana1/carrot2',
'apple10/banana2/carrot1']
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加