如何根据python中的条件将一个块拆分为一个列表中的两个块?

时间:2018-04-08 05:56:29

标签: python arraylist

给出的例子

keytool -list -v -alias androiddebugkey -keystore  %USERPROFILE%\.android\debug.keystore

如果任何块的值大于值4,我想在给定的示例列表中拆分块。

所以输出应该是

list = [[2, 3, 4], [3,4,5,6,7]]

不知怎的,我得到了必要的答案,但是,我只是想知道,

Python'是否有单行语句或功能?哪个会根据给定的条件给出所需的输出?

2 个答案:

答案 0 :(得分:1)

正如评论中的某些人所建议的那样,其他方法可以更具可读性,但我正在玩一行代码,只是为了好玩:

list = [[2, 3, 4], [3,4,5,6,7]]
new_list = [a for b in [[[x for x in y if x <= 4], [x for x in y if x > 4]] for y in list] for a in b if a]
print(new_list)

结果:     [[2,3,4],[3,4],[5,6,7]]

答案 1 :(得分:0)

您应该使用分块生成器

def chunks(l, n):
    """Yield successive n-sized chunks from l."""
    for i in range(0, len(l), n):
        yield l[i:i + n]

然后你可以通过一个生成器函数提供你的列表,这个函数将在第二级列表

def chunk_items(l, n):
    for sub_l in l:
        yield from chunks(sub_l, n)

或者如果你正在使用python&lt; 3.3

def chunk_items(l, n):
    for sub_l in l:
        for x in chunks(sub_l, n):
            yield x

这些返回一个生成器,但如果你真的想把它变成一个列表。

new_list = [x for x in chunk_items(lst, 3)]

编辑:

在你的问题中看到,如果子列表的长度大于5,你只想以3组为单位进行分块,这里有你如何修改chunker来做到这一点。

def chunk_items(l, n=3, m=5):
    for sub_l in l:
        if len(sub_l) > m:
            yield from chunks(sub_l, n)
        else:
            yield sub_l