从列表值中获取所有组合

zin*_*non 2 python list

我正在使用python 2.7,我有这个清单:

new_out_filename = ['OFF_B8', 0, 'ON_B8', 1, 'ON_B16', 4, 'OFF_B0', 7]
Run Code Online (Sandbox Code Playgroud)

我想得到这样的字符串的所有组合OFF_B8_vs_ON_B8,OFF_B8_vs_ON_B16,OFF_B8_vs_OFf_B0,ON_B8_vs_ON_16,等.

有没有一种简单的方法来实现它?

我尝试过类似的东西:

for k in range(0, len(new_out_filename), 2):
    combination = new_out_filename[k]+'_vs_'+new_out_filename[k+2]
    print combination
Run Code Online (Sandbox Code Playgroud)

但是我的列表没有索引,也没有得到适当的结果.

你能帮我吗?

Jea*_*bre 5

只需combinations在切片列表上使用即可忽略这些数字:

import itertools
new_out_filename = ['OFF_B8', 0, 'ON_B8', 1, 'ON_B16', 4, 'OFF_B0', 7]
for a,b in itertools.combinations(new_out_filename[::2],2):
    print("{}_vs_{}".format(a,b))
Run Code Online (Sandbox Code Playgroud)

结果:

OFF_B8_vs_ON_B8
OFF_B8_vs_ON_B16
OFF_B8_vs_OFF_B0
ON_B8_vs_ON_B16
ON_B8_vs_OFF_B0
ON_B16_vs_OFF_B0
Run Code Online (Sandbox Code Playgroud)

或理解:

result = ["{}_vs_{}".format(*c) for c in itertools.combinations(new_out_filename[::2],2)]
Run Code Online (Sandbox Code Playgroud)

结果:

['OFF_B8_vs_ON_B8', 'OFF_B8_vs_ON_B16', 'OFF_B8_vs_OFF_B0', 'ON_B8_vs_ON_B16', 'ON_B8_vs_OFF_B0', 'ON_B16_vs_OFF_B0']
Run Code Online (Sandbox Code Playgroud)