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 ![]() 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)] |