Python给定列表的一些特殊产品

标签 python

我想为给定列表的可能产品找到一种方法。下面,我举个例子

到目前为止,我试过这个:

for p in itertools.product(the_list, repeat=2):
        print p

但是,这会返回可以从给定列表生成的所有可能性。你能帮我生成以下示例吗?

一个例子:

the_list=['A1','A2','A3','B1','B2','B3','C1','C2','C3','D1','D2','D3']
The results should be: 
['A1A2','A1B2','A1C2','A1D2','A2A3','A2B3','A2C3','A2D3','A3A1','A3B1','A3C1','A3D1'
 'B1A2,'B2A3'...
 'C1A2'...']

基本上,大写字母表示状态,数字表示序列。因此,如果它从 A1 开始,它只能继续编号为 2 的状态,例如首先是 A1,然后是 A2 或 B2 或 C2 或 D2。它也是循环的,这意味着 A3 之后是 A1、B1、C1 或 D1。

最佳答案

l=['A1','A2','A3','B1','B2','B3','C1','C2','C3','D1','D2','D3']
result = [i + j for i in l for j in l if int(j[1]) == int(i[1]) + 1 or (j[1] == '1' and i[1] == '3')]
print(result)

这个输出:

['A1A2', 'A1B2', 'A1C2', 'A1D2', 'A2A3', 'A2B3', 'A2C3', 'A2D3', 'A3A1', 'A3B1', 'A3C1', 'A3D1', 'B1A2', 'B1B2', 'B1C2', 'B1D2', 'B2A3', 'B2B3', 'B2C3', 'B2D3', 'B3A1', 'B3B1', 'B3C1', 'B3D1', 'C1A2', 'C1B2', 'C1C2', 'C1D2', 'C2A3', 'C2B3', 'C2C3', 'C2D3', 'C3A1', 'C3B1', 'C3C1', 'C3D1', 'D1A2', 'D1B2', 'D1C2', 'D1D2', 'D2A3', 'D2B3', 'D2C3', 'D2D3', 'D3A1', 'D3B1', 'D3C1', 'D3D1']

如果你更喜欢可读性而不是紧凑性,那么打破一行

l=['A1','A2','A3','B1','B2','B3','C1','C2','C3','D1','D2','D3']
result = []
for i in l:
    for j in l:
        if int(j[1]) == int(i[1]) + 1 or (j[1] == '1' and i[1] == '3'):
            result.append(i+j)
print(result)

它输出同样的东西。

关于Python给定列表的一些特殊产品,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14168701/

相关文章:

订阅 react 源的 Python Web 服务在对象中产生奇怪的行为

python - Azure python SDK - AzureHttpError : The condition specified using HTTP conditional header(s) is not met

python - 带有 moviepy 的 FFMPEG

python - Plotly 中条形图的单独标记条

python - sqlite3 Connection 对象的 row_factory 方法的目的是什么?

python - Python-如何在两个方向上对自己的类执行操作?

python exe文件在Windows xp上启动时崩溃

python - Tensorflow C++ 评估性能比 Python 差

Python - 制作计数器,制作循环?

python - 最佳实践 - 访问对象变量