如何在Python中从列表中生成所有可能的排列对?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了如何在Python中从列表中生成所有可能的排列对?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1526字,纯文字阅读大概需要3分钟。
内容图文
![如何在Python中从列表中生成所有可能的排列对?](/upload/InfoBanner/zyjiaocheng/691/f7893990607e4b698ca30057a90fa2c5.jpg)
这个问题已经在这里有了答案: > How to generate all permutations of a list in Python 30个
如何从Python列表中生成所有可能的对置换?
例:
input = [3, 8, 2]
output = ['3-8', '3-2', '8-3', '8-2', '2-3', '2-8']
解决方法:
您可以使用itertools.permutations:
import itertools
input = [3, 8, 2]
final_list = ["{}-{}".format(*i) for i in itertools.permutations(input, 2)]
输出:
['3-8', '3-2', '8-3', '8-2', '2-3', '2-8']
但是,如果您想进行所有操作,包括列表的长度,可以尝试以下操作:
final_list = list(itertools.chain(*[['-'.join(["{}"]*b).format(*i) for i in itertools.permutations(input, b)] for b in range(2, len(input)+1)]))
输出:
['3-8', '3-2', '8-3', '8-2', '2-3', '2-8', '3-8-2', '3-2-8', '8-3-2', '8-2-3', '2-3-8', '2-8-3']
编辑:对于所有可能的操作数:
import re
def tokenize(s):
converter = {"-":lambda x, y:x-y, '+':lambda x, y:x+y}
total = 0
stack = re.findall('\d+|[\-\+]', s)
operator = None
for i in stack:
if i.isdigit():
if not operator:
total += int(i)
else:
total = converter[operator](total, int(i))
operator = None
else:
operator = i
return total
new_list = set(list(itertools.chain(*list(itertools.chain(*[[[''.join([''.join('{}'+i) for i in b]+['{}']).format(*c) for b in itertools.permutations(['-', '+'], len(c)-1)] for c in itertools.permutations(input, x)] for x in range(2, len(input)+1)])))))
final_list = {tokenize(a):a for a in new_list}
new_final_list = [b for a, b in final_list.items()]
输出:
['3-2', '8-3', '8-2', '8-3+2', '8-2+3', '8+2', '8+3', '2-8', '3-8', '3+2-8', '2-3']
内容总结
以上是互联网集市为您收集整理的如何在Python中从列表中生成所有可能的排列对?全部内容,希望文章能够帮你解决如何在Python中从列表中生成所有可能的排列对?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。