已经定义了过程 dashboard,参数为两个不同长度的列表
namepool = [clienta,clientb,clientc]
typepool = [type1,type2,type3,type4]
目前想让函数 dashboard 循环处理,即 dashboard[clienta,type1],dashboard[clienta,type2]...
目前写一个 dashboard(x for x in namepool, y for y in typepool)
这个语法错误,应该如何正确表达呢?
1
gnozix 2019-03-05 15:41:24 +08:00
[x, y for x in namepool for y in typepool]
|
2
qdzzyb 2019-03-05 15:53:23 +08:00
dashboard 接受的参数到底什么 是列表的话直接传进去不就可以了
|
3
jmc891205 2019-03-05 15:54:19 +08:00 via iPhone 1
你要写两层 for 循环 然后在最内层调用 dashboard 才对
|
4
jingxyy 2019-03-05 16:11:01 +08:00
还是再整理一下问题描述吧
前面说 dashboard 的参数是*两个不同长度的列表* 那不就直接把两个 pool 传进去不就行了吗?毕竟那两个 pool 不就是*两个不同长度的列表*吗? 后面的 dashboard[clienta,type1]这都不知道是啥了,也许是想说 dashboard(clienta,type)?如果是的话那不就和“ dashboard 的参数是两个不同长度的列表”矛盾了吗? |
5
youthfire OP 谢谢楼上各位,表述得不够清楚,望见谅。我要表达的效果是其实就是 3 楼说的两层 for 嵌套的结果,但是我想用一句话写完。类似于两个列表分别是[1,2,3] [4,5,6,7],我希望是 dashboard(1,4),dashboard(1,5),dashboard(1,6),dashboard(1,7),dashboard(2,4),dashboard(2,5),dashboard(2,6),dashboard(2,7), dashboard(3,4),dashboard(3,5),dashboard(3,6),dashboard(3,7)
dashboard(namepool, typepool)会直接报 TypeError: unhashable type: 'list' dashboard(x for x in namepool, y for y in typepool) 会直接报 SyntaxError: Generator expression must be parenthesized |
6
hotea 2019-03-05 16:36:06 +08:00 1
from itertools import combinations, permutations
|
7
xpresslink 2019-03-05 16:58:38 +08:00
关键是数据对齐的策略是什么?
>>> namepool = 'clienta,clientb,clientc'.split(',') >>> typepool = 'type1,type2,type3,type4'.split(',') >>> from itertools import zip_longest >>> [(c,t) for c,t in zip_longest(namepool,typepool,fillvalue=None)] [('clienta', 'type1'), ('clientb', 'type2'), ('clientc', 'type3'), (None, 'type4')] >>> |
8
jingxyy 2019-03-05 17:01:06 +08:00 1
那就这么搞就行啦:
[darshboard(x, y) for x in namepool for y in typepool] 如果你要组合的参数列表更多,或者甚至是不确定的数量,那就可以去研究研究 6 楼说的那俩函数。 |
9
xpresslink 2019-03-05 17:02:18 +08:00 1
>>> from itertools import product
>>> list(product([1,2,3], [4,5,6,7])) [(1, 4), (1, 5), (1, 6), (1, 7), (2, 4), (2, 5), (2, 6), (2, 7), (3, 4), (3, 5), (3, 6), (3, 7)] >>> |
10
aieike 2019-03-09 09:18:06 +08:00 via Android 1
列表推导式中循环后不要逗号
|