首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >列表列表的for循环内的While循环

列表列表的for循环内的While循环
EN

Stack Overflow用户
提问于 2017-11-27 10:15:20
回答 4查看 553关注 0票数 2

我正在尝试创建一个包含字符串列表的大列表。我迭代了字符串的输入列表,并创建了一个临时列表。输入:

代码语言:javascript
复制
['Mike','Angela','Bill','\n','Robert','Pam','\n',...]

我想要的输出:

代码语言:javascript
复制
[['Mike','Angela','Bill'],['Robert','Pam']...]

我得到的是:

代码语言:javascript
复制
[['Mike','Angela','Bill'],['Angela','Bill'],['Bill']...]

代码:

代码语言:javascript
复制
for i in range(0,len(temp)):
        temporary = []
        while(temp[i] != '\n' and i<len(temp)-1):
            temporary.append(temp[i])
            i+=1
        bigList.append(temporary)
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2017-11-27 10:21:19

修复你的代码,我建议直接迭代每个元素,附加到一个嵌套的列表中--

代码语言:javascript
复制
r = [[]]
for i in temp:
    if i.strip():
        r[-1].append(i)
    else:
        r.append([])

请注意,如果temp以换行符结尾,r将有一个尾随的空[]列表。不过,你可以摆脱这一点:

代码语言:javascript
复制
if not r[-1]:
    del r[-1]

另一种选择是使用itertools.groupby,另一个回答者已经提到过。不过,您的方法性能更好。

票数 0
EN

Stack Overflow用户

发布于 2017-11-27 10:20:05

使用itertools.groupby

代码语言:javascript
复制
from itertools import groupby
names = ['Mike','Angela','Bill','\n','Robert','Pam']
[list(g) for k,g in groupby(names, lambda x:x=='\n') if not k]
#[['Mike', 'Angela', 'Bill'], ['Robert', 'Pam']]
票数 3
EN

Stack Overflow用户

发布于 2017-11-27 10:40:12

您可以尝试:

代码语言:javascript
复制
a_list = ['Mike','Angela','Bill','\n','Robert','Pam','\n']

result = []

start = 0
end = 0

for indx, name in enumerate(a_list):    
    if name == '\n':
        end = indx
        sublist = a_list[start:end]
        if sublist:
            result.append(sublist)
        start = indx + 1    

>>> result
[['Mike', 'Angela', 'Bill'], ['Robert', 'Pam']]
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47503071

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档