我确信这个问题已经被问过了(可能以更雄辩的方式(,但我找不到答案,因此如果这是一个重复的,我深表歉意。
我正在尝试遍历一个列表,并将每个不是数字的元素添加到另一个列表中。但是,每次在原始列表中遇到数字时,我都希望在辅助列表中创建一个新列表。例如,如果"a3buysi8byjs"是输入,则输出将为:[[a], [b,u,y,s,i], [b,y,j,s]]。
我已经尝试了几件事,并决定简化我的代码并从头开始,这导致了以下结果:
for e in S_li: #going through initial list, all elements available
if e.isdigit() != True: # if it is an integer, create another list within poss
poss.extend(e) #if it is a letter add to the same list in poss.
*我也留下了我的评论,因为也许这将有助于澄清我的意图。
提前感谢!
我相信这应该能让你得到你想要的东西:
s = 'a3buysi8byjs5'
partial = []
final = []
for c in s:
if c.isdigit():
final.append(partial)
partial = []
else:
partial.append(c)
if len(partial) > 0:
final.append(partial)
print(final)
这应该打印出来:[['a']
, ['b', 'u', 'y', 's', 'i'], ['b', 'y', 'j', 's']]这将适用于您的字符串:
#!/usr/bin/env python
data = 'a3buysi8byjs'
if data[-1].isdigit():
data += "1"
sublist = []
target = []
for i in data:
if i.isdigit():
target.append(sublist)
sublist = []
else:
sublist.append(i)
print(target)
将打印:
[['a'], ['b', 'u', 'y', 's', 'i'], ['b', 'y', 'j', 's']]
使用 itertools.groupby 的替代方案:
[list(k) for i, k in itertools.groupby(data, lambda x: x.isdigit()) if not i]