python 排列组合_python实现排列组合

前言

假如有一个题目如:

arr  = ["S","O","S","S","O","S","S","O","S","S"]//其中"O"有两种可能性:“S”或者“-”,罗列出所有的可能结果,且原有的顺序不能改变。

如果用其他语言实现相对比较麻烦,用python自带的迭代器就非常简单。

实现

from itertools import productarr  = ["S","O","S","S","O","S","S","O","S","S"]arr_index = []  ## 存储O的indexarr_value = []  ## 存储Oarr_source = [] ## 存储非O的元素for i in range(len(arr)):    if arr[i] == "O":        arr_index.append(i) ## 存储O的index        arr_value.append(arr[i]) ## 存储O    else:        arr_source.append({i:arr[i]}) # 转化为{index:value} 形式存储print(arr_index)print(arr_value)print(arr_source)fomat = ["S","-"] #假设每一个O有两种选择:S,_lens = len(arr_value)res_1 = [] #排列组合的结果for item in product(fomat,repeat=lens):    arr = []    for i in range(len(item)):        arr.append({arr_index[i]:item[i]})    res_1.append(arr)res_2 = [] #存储最终的一个结果for item in res_1:    arr = []    arr.extend(item)    arr.extend(arr_source)    print(arr)    res_2.append(arr) print(res_2)

结果

[1, 4, 7]['O', 'O', 'O'][{0: 'S'}, {2: 'S'}, {3: 'S'}, {5: 'S'}, {6: 'S'}, {8: 'S'}, {9: 'S'}][{1: 'S'}, {4: 'S'}, {7: 'S'}, {0: 'S'}, {2: 'S'}, {3: 'S'}, {5: 'S'}, {6: 'S'}, {8: 'S'}, {9: 'S'}][{1: 'S'}, {4: 'S'}, {7: '-'}, {0: 'S'}, {2: 'S'}, {3: 'S'}, {5: 'S'}, {6: 'S'}, {8: 'S'}, {9: 'S'}][{1: 'S'}, {4: '-'}, {7: 'S'}, {0: 'S'}, {2: 'S'}, {3: 'S'}, {5: 'S'}, {6: 'S'}, {8: 'S'}, {9: 'S'}][{1: 'S'}, {4: '-'}, {7: '-'}, {0: 'S'}, {2: 'S'}, {3: 'S'}, {5: 'S'}, {6: 'S'}, {8: 'S'}, {9: 'S'}][{1: '-'}, {4: 'S'}, {7: 'S'}, {0: 'S'}, {2: 'S'}, {3: 'S'}, {5: 'S'}, {6: 'S'}, {8: 'S'}, {9: 'S'}][{1: '-'}, {4: 'S'}, {7: '-'}, {0: 'S'}, {2: 'S'}, {3: 'S'}, {5: 'S'}, {6: 'S'}, {8: 'S'}, {9: 'S'}][{1: '-'}, {4: '-'}, {7: 'S'}, {0: 'S'}, {2: 'S'}, {3: 'S'}, {5: 'S'}, {6: 'S'}, {8: 'S'}, {9: 'S'}][{1: '-'}, {4: '-'}, {7: '-'}, {0: 'S'}, {2: 'S'}, {3: 'S'}, {5: 'S'}, {6: 'S'}, {8: 'S'}, {9: 'S
766c3b2748b455a5a6e6db56af0b2034.png
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值