【问题标题】:get all 4 digit combinations out of a list of strings从字符串列表中获取所有 4 位数字组合
【发布时间】:2018-02-25 02:29:04
【问题描述】:

我有一个由 4 个数字字符串组成的列表(即:list = ['0000', '1111', ...]) 现在我想为每个项目获取所有可能的 4 位数组合(无代表)的列表

这是我使用排列的代码(当然它有重复,但我会发布这个,因为当我尝试组合时效果非常糟糕)

permutes = defaultdict(list)
for item in funo_clean: ## funo_clean is the list with 4 digit numbers
    for permutation in list(itertools.permutations(item)):
        permutes[item].append("".join([str(x) for x in permutation]))
    print ("\n")

另外,我不希望组合列表包含我用来生成它的相同数字(即:如果我使用“8800”来生成它,这个数字不应该在列表中)

谢谢!

【问题讨论】:

  • 你试过itertools.combinations吗?
  • @JohnGordon 是的,但结果不好(也许我没有正确使用它)这就是我使用排列发布代码的原因,因为它更符合我的目标。
  • 向我们展示您的尝试,并解释为什么结果不是您想要的,也许我们可以提供帮助。
  • 唯一的区别是 itertools.permutations(item) 到 itertools.combinations (item, len(item)) 的变化,但我得到的排列代码,例如:0647 => [0647, 0674 , 0467, ...] ## 以及所有可能的组合代码排列我只在列表 0647 => [0647] 中得到一项

标签: python combinations permutation


【解决方案1】:

set 排列:

permutes = {}
for item in funo_clean:
    permutes[item] = [''.join(permutation) for permutation in set(itertools.permutations(item))]
    permutes[item].remove(item)
    permutes[item].sort()

【讨论】:

  • 我认为这会消除所有代表,因为如果项目是“8800”,那么将有多个“8800”
  • @SJPRO 这不是你说的你想要的吗?
  • @DeliriousLettuce 是的,我在回复你的“你为什么不使用下一个”,我以为他没有使用下一个,因为下一个只会摆脱第一次出现的项目。对吗?
  • @endless 我刚刚将“for permutation in list(itertools.permutations(item))”更改为“for permutation in set(itertools.permutations(item))”。这实际上与您所做的相同,对吗?
  • 这样你可以同时排序和创建列表。 bpaste.net/show/ebde3d5ba358
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-08-16
  • 2021-06-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多