给出的例子
keytool -list -v -alias androiddebugkey -keystore %USERPROFILE%\.android\debug.keystore
如果任何块的值大于值4,我想在给定的示例列表中拆分块。
所以输出应该是
list = [[2, 3, 4], [3,4,5,6,7]]
不知怎的,我得到了必要的答案,但是,我只是想知道,
Python'是否有单行语句或功能?哪个会根据给定的条件给出所需的输出?
答案 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