Python 有没有办法缩短这个列表?

Python 有没有办法缩短这个列表?,python,list,python-3.x,list-comprehension,Python,List,Python 3.x,List Comprehension,你能帮我缩短这个涉及列表理解的python代码吗?在我的当前代码中,未使用变量e_col。我还不知道如何利用这个e\u 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

你能帮我缩短这个涉及列表理解的python代码吗?在我的当前代码中,未使用变量
e_col
。我还不知道如何利用这个
e\u 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
然后您只需要行和列的编号,这显然是一个很好的选择:

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
s,而不仅仅是
e\u col

列表理解可以使用嵌套循环、纯Python、无libs来实现“产品”

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

你能描述一下这里到底发生了什么吗?这样做的目的是什么?我得到了我的预期结果列表,如上面的描述所示。我想缩短代码,并利用
e_col
tupleThanks作为答案和一行代码。然而,在实际应用中,结果列表中的
A
也是一个变量(即
inst
)。我如何修改你的答案才能考虑到这一点?@meeyawa这是一个非常简单的调整,我相信你不需要进一步的帮助就可以做到。好的。顺便说一下,谢谢。是的,我知道如何调整。再次感谢,谢谢。你的这个代码非常简洁。