繁体   English   中英

有没有办法可以缩短这个列表理解?

[英]Is there a way I can shorten this list comprehension?

你能帮我缩短这个涉及列表推导的python代码吗? 在我当前的代码中,未使用变量e_col 我还不知道如何利用这个e_col变量。 这是代码:

e_rows = (10,34)
e_col = (4,6,8,10,13,15,17,19)
inst = 'A'

test_list = [inst+'_r'+str(e_rows[0])+'c'+str(i) for i in range(4,12,2)]
test_list.extend([inst+'_r'+str(e_rows[0])+'c'+str(i) for i in range(13,21,2)])
test_list.extend([inst+'_r'+str(e_rows[1])+'c'+str(i) for i in range(4,12,2)])
test_list.extend([inst+'_r'+str(e_rows[1])+'c'+str(i) for i in range(13,21,2)])

print(test_list)

当我运行此代码时,它返回:

['A_r10c4', 'A_r10c6', 'A_r10c8', 'A_r10c10', 'A_r10c13', 'A_r10c15', 'A_r10c17', 'A_r10c19', 'A_r34c4', 'A_r34c6', 'A_r34c8', 'A_r34c10', 'A_r34c13', 'A_r34c15', 'A_r34c17', 'A_r34c19']

我也查看了itertools.product但我无法理解它是如何工作的。

看起来你元素的基本结构是:

'A_r{}c{}'  # {} are the placeholders for str.format

那么你只需要行和列号, itertools.product肯定是一个不错的选择:

from itertools import product

test_list = ['A_r{}c{}'.format(row, col) for row, col in product(e_rows, e_col)]

这给出了相同的输出:

>>> test_list
['A_r10c4', 'A_r10c6', 'A_r10c8', 'A_r10c10', 'A_r10c13', 'A_r10c15', 'A_r10c17', 'A_r10c19', 'A_r34c4', 'A_r34c6', 'A_r34c8', 'A_r34c10', 'A_r34c13', 'A_r34c15', 'A_r34c17', 'A_r34c19']

目前尚不清楚为什么你使用两个range而不仅仅是e_col

list comprehension可以用嵌套循环,纯Python,没有库来做“产品”

test_list = [inst+'_r'+str(j)+'c'+str(i) for j in e_rows for i in e_col]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM