2

リストを検索文字列で分割する便利な Pythonic の方法はありますか (リストに非文字列が含まれていて、リストがネストされている場合でも)。たとえば、次を「,」で分割したいとします。

[[ 'something', ',', 'eh' ], ',', ['more'], ',', 'yet more', '|', 'even more' ]

これは次のようになります。

[[[ 'something', ',', 'eh' ]], [['more']], ['yet more', '|', 'even more']]
4

2 に答える 2

7

Take a look at itertools.groupby:

In [1]: from itertools import groupby

In [2]: lst = [[ 'something', ',', 'eh' ], ',', ['more'], ',', 'yet more', '|', 'even more' ]

In [3]: [list(group) for key, group in groupby(lst, lambda x: x!=',') if key]
Out[3]: [[['something', ',', 'eh']], [['more']], ['yet more', '|', 'even more']]

基本的に、リスト内の項目を基準 ( ) に基づいてグループに分割しitem != ','、理解度チェック により、 に等しい項目であるif kグループを除外します。False','

In [4]: for key, group in groupby(lst, lambda x: x!=','):
   ...:     print key, list(group)
   ...:     
True [['something', ',', 'eh']]
False [',']
True [['more']]
False [',']
True ['yet more', '|', 'even more']
于 2013-04-19T17:31:28.900 に答える
0

パーティーに遅れましたが、FWIW、センチネル値itertools.takewhileとを組み合わせることで、迅速な解決策が得られると思いますiter

from itertools import takewhile

z = [[ 'something', ',', 'eh' ], ',', ['more'], ',',
  'yet more', '|', 'even more' ]
z = iter(z)
def provider():
  return list(takewhile(lambda x: x != ',', z))

for i in iter(provider, []):
  print i

... 
[['something', ',', 'eh']]
[['more']]
['yet more', '|', 'even more']
于 2013-04-19T21:29:09.717 に答える