2016-02-28 8 views
6

私は次のようs文字列のリストを持っています。 ?!.\nがありますたびに、次のように新しいサブリストが形成されている:Pythonの:</p> <pre><code>s = ['Hello', 'world', '!', 'How', 'are', 'you', '?', 'Have', 'a', 'good', 'day', '.'] </code></pre> <p>が、私はこのリストがサブリストに分割することにしたい:文字列の部分リストを含むリスト

final = [['Hello', 'world', '!'], 
     ['How', 'are', 'you', '?'], 
     ['Have', 'a', 'good', 'day', '.']] 

私はこの試みた:

x = 0 
for i in range(len(s)): 
    if s[i] in ('!','?','.','\n'): 
     final = s[x: x+i] 
    x = i+1 

最終店私の出力を。それがあるべき方法を得ていない。助言がありますか?

答えて

1

次を使用することができます。

[['Hello', 'world', '!'], ['How', 'are', 'you', '?'], ['Have', 'a', 'good', 'day', '.']] 

s = ['Hello', 'world', '!', 'How', 'are', 'you', '?', 'Have', 'a', 'good', 'day', '.'] 
letters = ['!', '?', '.'] 

idxes = [idx for idx, val in enumerate(s) if val in letters] 
idxes = [-1] + idxes 
answer = [s[idxes[i]+1:idxes[i+1]+1] for i in range(len(idxes[:-1]))] 
print(answer) 

出力は、これは句読点が発生sidxesを抽出するためにenumerate機能を内蔵したリストの内包を使用しています。次に、の値を使用してsをスライスして、別のリスト内包表記を使用してサブリストのリストを作成します。

1
s = ['Hello', 'world', '!', 'How', 'are', 'you', '?', 'Have', 'a', 'good', 'day', '.'] 
final = [] 
b = [] 
for x in s: 
    b.append(x) 
    if x in ('.', '?', '!', '\n'): 
     final.append(b) 
     b = [] 
2

あなたは遠くありませんでした:

x=0 
final=[] 
for i in range(len(s)): 
    if s[i] in ('!','?','.','\n'): 
     final.append(s[x:i+1]) 
     x=i+1 

のみインデックス問題のビットおよびすべての 部分のリストを収集するための最終的なリストを作ります。

+0

私の代わりにインデックスを取得するためにenumerate' 'を使用することをお勧めします、そして一般的に、線形検索対、その一定の時間のメンバーシップのテストのための' set'を使用することをお勧めしますタプルまたはリスト – Copperfield

+0

@Copperfield:実際には 'enumerate'はインデックス作成にはより良いですが、struを変更しますコードの意味。私は元の構造にできる限り近づきたいと思っていました。 – mkiever

0

1 finalは空の配列です。

2ループが存在しないときはwhileループがtrueで、インデックスが< len(s)であるときにtrueです。 0 1 + postionに単語

4はメインストリングSを縮小有する最終配列へ

3追記。あなたが持っていないので、私は本当に多くの場合、私はあなたにもあなたの最初のリストからジェネレータを作成しようとすることができると思いますが、あなたのケースでは、パイソンを使用していないよ

final = [] 
i =0 
while len(s) and i<len(s): 
    if s[i] in ('!','?','.','\n'): 
     final.append(s[:i+1]) 
     s = s[i+1:] 
    i +=1 
print(final) 
0

指標値INCR

5リストの保存リストに:

>>> from itertools import chain 
>>> def func(s): 
...  g = iter(s) 
...  def inner_func(g): 
...   for x in g: 
...    yield x 
...    if x in ('.', '?', '!', '\n'): 
...     break 
...  while True: 
...   try: 
...    f = g.next() 
...   except StopIteration: 
...    break 
...   else: 
...    yield inner_func(chain([f], g)) 
>>> [[y for y in x] for x in func(s)] 
[['Hello', 'world', '!'], ['How', 'are', 'you', '?'], ['Have', 'a', 'good', 'day', '.']] 
関連する問題