具有多个列表和条件的排列

问题描述 投票:0回答:2

我想生成每个5个字符的字符串两个列表的排列

List 1: [A-Z] all caps Alphabets
List 2: [0-9] Digits

字符串条件

  1. 每个字符串必须包含分钟。至少1位数之1个字母
  2. 每个字符串不得包含超过3个相同的数字(数字/字母)

示例输出:

B9B61
6F084
7C9DA
9ECF9
E7ACF

我尝试过此操作,但我知道到目前为止我无法应用条件,现在非常困惑请帮助

from itertools import permutations 

perm = [''.join(p) for p in permutations('ABCDEFGHIJKLMOPQRSTUVWXYZ0123456789', 5)] 

for i in list(perm): 
    with open("list.txt", "a+") as file:
        file.write(i)
        file.write("\n")
python combinations permutation
2个回答
0
投票

您可以通过应用一些检查来选择permutations

from itertools import permutations
from collections import Counter

for i in permutations('ABCDEFGHIJKLMOPQRSTUVWXYZ0123456789', 5):
    combo = "".join(i)
    result = Counter(i)
    if any(s>=3 for s in result.values()) \
            or sum(c.isdigit() for c in i)<1 \
            or sum(c.isalpha() for c in i)<1:
        continue
    print (combo)

0
投票

以下将打印出所有大写字母和数字的全部5个字符组合,且任何字符或数字均不超过3。

import string
import itertools
possible_combinations = itertools.permutations(string.ascii_uppercase * 3 + string.digits * 3, 5)
for possible_str in (''.join(chars) for chars in possible_combinations):
    if possible_str.isnumeric() or possible_str.isalpha():
        continue
    else:
       print(possible_str)

要获得字母和数字的所有组合,并且首先重复不超过3个,我们看一下itertools.permutations。给定一个可迭代的字符(字符串),它将返回给定长度的那些字符的所有组合。

>>> [''.join(x) for x in itertools.permutations('ABC', 3)]
['ABC', 'ACB', 'BAC', 'BCA', 'CAB', 'CBA']

如果我们传递每个字符3个,排列将返回所有组合,每个字符最多3个

要做的最后一件事是过滤掉没有数字或字母的字符串。如果所有字符都是数字,则string.isnumeric()返回true;如果所有字符都是字母,则string.isalpha()返回true。

© www.soinside.com 2019 - 2024. All rights reserved.