Python:包含字符串子列表的列表

时间:2016-02-28 16:51:20

标签: python list sublist

我有一个字符串s列表如下:

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

我希望将此列表拆分为子列表。只要有?!.\n,就会形成一个新的子列表,如下所示:

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

最终存储我的输出。没有得到应有的方式。有什么建议吗?

5 个答案:

答案 0 :(得分:2)

你不是那么遥远:

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

只有一点索引问题,并最终列出一个收集所有 部分名单。

答案 1 :(得分:1)

您可以使用以下内容:

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)

<强>输出

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

这使用内置enumerate函数的列表推导来提取出现标点符号的idxes s。然后,它使用另一个列表推导来构建一个子列表列表,方法是使用s的值对idxes进行切片。

答案 2 :(得分: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 = []

答案 3 :(得分:0)

1让final为空数组。

2当while不为空并且索引&lt;时,循环为真。镜片)。

3附加到最终数组,0到postion + 1个单词

4缩小主弦s。

5包含指数值

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)

答案 4 :(得分:0)

我并不经常使用python,但在你的情况下,我认为你也可以尝试从你的初始列表创建一个生成器,所以你不必存储列表列表:

>>> 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', '.']]