python3 - for/while 循环遍历列表

时间:2021-07-12 02:40:32

标签: python for-loop

是否有另一种方法来实现以下想法:

我正在尝试使用 for 循环形成子列表(仅限数字)。我想遍历给定的列表,像往常一样从第一个元素开始,直到出现一个字母。如果出现某种字符(或字母),那么 for 循环应该正好停在那个位置,返回到目前为止形成的列表并继续工作。最后,主列表应该包含所有形成的子列表并返回它们。

我尝试使用 while 循环,因为这种循环应该跳过列表的所有元素并同时检查每个元素是否为整数。但不幸的是我的实现没有奏效。顺便说一句,我更喜欢不使用 itertool (groupby) 的实现。

非常感谢您的帮助!

a_list = [1, 1, 'z', 1, 'x', 1, 1, 'c', 1, 1, 1, 'v', 1]

main_list = []
small_list = []

for i in a_list:
    if isinstance(i, int):
        small_list.append(i)
    else:
        main_list += [small_list]
        small_list = []
main_list += [small_list]
    

print("main_list: ", main_list)
# [[1, 1], [1], [1,1], [1,1,1], [1]]

final_list = []
for i in main_list:
    item_length = len(i)
    final_list += [item_length]
print("final list is: ", final_list)

2 个答案:

答案 0 :(得分:0)

如果数组中的所有项都是单个字符,而不是像 12AB 这样的字符,则可以将所有项 join 合并为一个 string '11z1x11c111v1'然后使用 Python string methods,可能是 find() 和带有 : 的子列表的组合。

答案 1 :(得分:0)

import itertools
a_list = [1, 1, 'z', 1, 'x', 1, 1, 'c', 1, 1, 1, 'v', 1]
bool_list = [True if isinstance(e, int) else False for e in a_list]
group_list = [list(g) for _, g in itertools.groupby(enumerate(bool_list), key = lambda x: x[-1])]
final_list = [len(e) for e in group_list if e[-1][-1]]
print("final list is: ", final_list)