【发布时间】:2019-02-20 06:32:13
【问题描述】:
注意:这是一个约定俗成的问题;代码确实工作。也就是说,我正在打磨 8 个月。项目并且无法找出设置以下样式的最佳方式:
def foo(Xs, Ys, image):
products = []
for prod in product(Xs,Ys):
products.append([prod])
items = []
for comb in products:
for item in comb:
items.append(item)
return [[[t[1][0], t[0][0]],
image[t[1][0]:t[1][1],
t[0][0]:t[0][1]]]
for t in list(set(items))]
所以我有 2 个问题:1)我知道平面比嵌套更好,但我可以返回一个像这样的(不是那么)单行列表而不会违反约定太多吗? 2) 如果我确实想将此野兽作为伪单线返回,PEP8 关于空格和括号的约定是什么?
编辑:代码中的第二个循环是出于调试原因,我完全忘记将其取出。尴尬。
更新为:
def foo(Xs, Ys, image):
products = []
for prod in product(Xs,Ys):
products.append(prod)
return [[[t[1][0], t[0][0]],
image[t[1][0]:t[1][1],
t[0][0]:t[0][1]]]
for t in set(products)]
【问题讨论】:
-
为什么是
for t in list(set(items))?为什么不首先将items设置为一组... -
您没有返回单行 for 循环。您正在返回一个列表。
-
为什么要先创建产品,然后对其进行迭代以检查其项目(即由
products.append([prod])创建的单个元素列表并将它们填充到另一个列表中,然后将它们放入一个集合中... -
这是一个代码审查问题
-
看起来你可以用
items = set(item for prod in product(Xs,Ys) for item in prod)替换你的前两组for循环,然后用items替换list(set(items))。
标签: python conventions pep8