【问题标题】:Unique permutations of a list without repetition不重复的列表的唯一排列
【发布时间】:2019-10-19 00:11:29
【问题描述】:

我知道关于permutationsuniquevariable lengthetc.)的帖子很多,很多,但我无法使用它们来解决我的特定问题问题。

假设我有一份美国大都市区列表:['nyc','sf','atl']

我需要输出 2 个 Metros 的排列而不重复。例如,我尝试过:

set(itertools.permutations(['nyc','sf','atl'], 2))

{('atl', 'nyc'),
 ('atl', 'sf'),
 ('nyc', 'atl'),
 ('nyc', 'sf'),
 ('sf', 'atl'),
 ('sf', 'nyc')}

但是,请注意 NYC 和 ATL 配对了两次:('nyc', 'atl')('atl', 'nyc')。理想的输出是:

{('nyc', 'nyc'),
 ('nyc', 'sf'),
 ('nyc', 'atl'),
 ('sf', 'sf'),
 ('sf', 'atl'),
 ('atl', 'atl')}

【问题讨论】:

  • 您想要组合,itertools.combinations?,例如combinations('ABCD', 2) --> AB AC AD BC BD CD。还有combinations_with_replacement
  • @DanielMesejo 是的,这行得通!具体来说,list(itertools.combinations_with_replacement(['nyc','sf','atl'], 2)) 正是我正在寻找的,因为它也可以相互比较(例如,我在列表中得到 ('nyc', 'nyc')

标签: python


【解决方案1】:

正如@Daniel Mesejo 评论所述,使用组合。

>>> import itertools
>>> set(itertools.combinations(['nyc','sf','atl'], 2))
{('nyc', 'atl'), ('sf', 'atl'), ('nyc', 'sf')}

【讨论】:

  • 那你为什么用permutations呢?
  • 谢谢,打错字了
猜你喜欢
  • 2019-06-24
  • 2013-02-16
  • 1970-01-01
  • 2014-07-05
  • 1970-01-01
  • 2019-04-22
  • 2014-07-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多