l = [1,2,3,4,5,6,7,8,9]
这个列表 能不能用列表生成式 只写一行拆成大于 5 的 跟小于等于 5 的 两个列表
我只知道 x = [x for in l if x >5 ]
能不能写一行 x,y = [xxxxxxxxxxxx]
这样???
1
ctro15547 2018-03-06 12:27:58 +08:00
x,y = [[x for x in l if x > 5 ],[y for y in l if y <= 5]]
#[6, 7, 8, 9] [1, 2, 3, 4, 5] 哈哈哈笨办法 |
4
prolic 2018-03-06 13:17:45 +08:00
x,y = map(lambda y: filter(lambda z:z,list(y)),zip(*[(x,None) if x > 5 else (None,x) for x in l]))
|
6
jasonailu 2018-03-06 13:59:51 +08:00 1
x, y = [[x for x in l if func(x)] for func in (lambda x:x<=5, lambda x:x>5)]
|
7
hbkdsm 2018-03-06 14:02:00 +08:00
Readability counts;
Write plain code, not clever code |
8
jakeyfly OP 楼上大佬们都太 6 了 不过这样定 阅读性太差了 我还是老实的 FOR 循环吧
|
10
ctro15547 2018-03-19 08:26:16 +08:00
l = [1,2,3,4,5,6,7,8,9]
x,y = [filter(lambda k: k > 4, l), filter(lambda k: k <= 4, l)] |