[英]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.