置换发生器 [英] Permutation Generator

查看:90
本文介绍了置换发生器的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我确定我不是第一个这样做的人,但我想分享

这个:一个返回列表所有排列的生成器:

def permute(lst):

if len(lst)== 1:

yield lst

else:

head = lst [:1]

for x in permute(lst [1:]):

yield head + x

收益率x +头部

返回


- Talin

解决方案

< blockquote>在文章< ma *************************************** @ python。 org>,

Talin< ta *** @ acm.org>写道:

我确定我不是第一个这样做的人,但我想分享这个:一个返回列表所有排列的生成器:

def permute(lst):
如果len(lst)== 1:
产量lst
否则:
head = lst [:1]
for permute(lst [1:]):
产量头+ x
产量x +头
返回




你是对的,你不是第一个这样做的人:很多其他人

也发布了不正确的排列生成器。


您是否在一些简单的测试用例上尝试过代码?


list(permute([1,2,3]))

==> [[1,2,3],[2,3,1],[1,3,2],[3,2,1]]


明显缺席此列表是[2,1,3]和[2,3,1]。问题

因列表更长而变得更糟。基本问题是x需要能够在所有位置发生,而不仅仅是开始和结束。


干杯,

-M


-

Michael J. Fromberger |计算机科学系讲师
http://www.dartmouth.edu / ~sting / |达特茅斯学院,美国新罕布什尔州汉诺威


Talin< ta *** @ acm.org>写道:

我确定我不是第一个这样做的人,但我想分享这个:一个返回列表所有排列的生成器:

def permute(lst):
如果len(lst)== 1:
产量lst
否则:
head = lst [:1]
对于x in permute(lst [1:]):
产量头+ x
产量x +头
返回

- Talin




嗯:
用于置换p([1,2, 3]):



打印p

[1,2,3]

[2,3,1]

[1,3,2]

[3,2,1]


哎呀。


" Talin" < TA *** @ acm.org>在留言中写道

新闻:ma ************************************ *** @ pyt hon.org ...

我想分享
这个:返回列表所有排列的生成器:



试试这个:

def permuteg(lst):return([lst [i]] + x

for i in range(len(lst))

for x in permute(lst [:i] + lst [i + 1:]))\

或[[]]


Alan Isaac


I''m sure I am not the first person to do this, but I wanted to share
this: a generator which returns all permutations of a list:

def permute( lst ):
if len( lst ) == 1:
yield lst
else:
head = lst[:1]
for x in permute( lst[1:] ):
yield head + x
yield x + head
return

-- Talin

解决方案

In article <ma***************************************@python. org>,
Talin <ta***@acm.org> wrote:

I''m sure I am not the first person to do this, but I wanted to share
this: a generator which returns all permutations of a list:

def permute( lst ):
if len( lst ) == 1:
yield lst
else:
head = lst[:1]
for x in permute( lst[1:] ):
yield head + x
yield x + head
return



You''re right that you''re not the first person to do this: Many others
have also posted incorrect permutation generators.

Have you tried your code on some simple test cases?

list(permute([1, 2, 3]))
==> [[1, 2, 3], [2, 3, 1], [1, 3, 2], [3, 2, 1]]

Notably absent from this list are [2, 1, 3] and [2, 3, 1]. The problem
gets worse with longer lists. The basic problem is that x needs to be
able to occur in ALL positions, not just the beginning and the end.

Cheers,
-M

--
Michael J. Fromberger | Lecturer, Dept. of Computer Science
http://www.dartmouth.edu/~sting/ | Dartmouth College, Hanover, NH, USA


Talin <ta***@acm.org> writes:

I''m sure I am not the first person to do this, but I wanted to share
this: a generator which returns all permutations of a list:

def permute( lst ):
if len( lst ) == 1:
yield lst
else:
head = lst[:1]
for x in permute( lst[1:] ):
yield head + x
yield x + head
return

-- Talin



Hmm:

for p in permute([1,2,3]):


print p

[1, 2, 3]
[2, 3, 1]
[1, 3, 2]
[3, 2, 1]

Oops.


"Talin" <ta***@acm.org> wrote in message
news:ma***************************************@pyt hon.org...

I wanted to share
this: a generator which returns all permutations of a list:


Try this instead:
def permuteg(lst): return ([lst[i]]+x
for i in range(len(lst))
for x in permute(lst[:i]+lst[i+1:])) \
or [[]]

Alan Isaac


这篇关于置换发生器的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆