Python 定义函数中两列不同长度的列表为参数失败

2019-03-05 14:28:54 +08:00
 youthfire

已经定义了过程 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)

这个语法错误,应该如何正确表达呢?

1705 次点击
所在节点    Python
10 条回复
gnozix
2019-03-05 15:41:24 +08:00
[x, y for x in namepool for y in typepool]
qdzzyb
2019-03-05 15:53:23 +08:00
dashboard 接受的参数到底什么 是列表的话直接传进去不就可以了
jmc891205
2019-03-05 15:54:19 +08:00
你要写两层 for 循环 然后在最内层调用 dashboard 才对
jingxyy
2019-03-05 16:11:01 +08:00
还是再整理一下问题描述吧
前面说 dashboard 的参数是*两个不同长度的列表* 那不就直接把两个 pool 传进去不就行了吗?毕竟那两个 pool 不就是*两个不同长度的列表*吗?
后面的 dashboard[clienta,type1]这都不知道是啥了,也许是想说 dashboard(clienta,type)?如果是的话那不就和“ dashboard 的参数是两个不同长度的列表”矛盾了吗?
youthfire
2019-03-05 16:36:02 +08:00
谢谢楼上各位,表述得不够清楚,望见谅。我要表达的效果是其实就是 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
hotea
2019-03-05 16:36:06 +08:00
from itertools import combinations, permutations
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')]
>>>
jingxyy
2019-03-05 17:01:06 +08:00
那就这么搞就行啦:
[darshboard(x, y) for x in namepool for y in typepool]
如果你要组合的参数列表更多,或者甚至是不确定的数量,那就可以去研究研究 6 楼说的那俩函数。
xpresslink
2019-03-05 17:02:18 +08:00
>>> 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)]
>>>
aieike
2019-03-09 09:18:06 +08:00
列表推导式中循环后不要逗号

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/541320

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX