python - 使用嵌套 for 循环的组合

标签 python for-loop combinations

<分区>

我的问题的简化版本是: 我写了这段代码:

string = ['A','A','A','A']
temp=string[:]

f=open('combin.txt', 'a')

for x1 in range(0,2):
    if x1==1:
        temp[0]='X'
    for x2 in range(0,2):
        if x2==1:
            temp[1]='X'
        for x3 in range(0,2):
            if x3==1:
                temp[2]='X'
            for x4 in range(0,2):
                if x4==0:
                    f.write(''.join(temp)+'\n')
                if x4==1:
                    temp[3]='X'
                    f.write(''.join(temp)+'\n')

结果是:

AAAA
AAAX
AAXX
AAXX
AXXX
AXXX
AXXX
AXXX
XXXX
XXXX
XXXX
XXXX
XXXX
XXXX
XXXX
XXXX

但我期望的是组合: AAAA级 AAAX 美国航空安全协会 安盛 XAAA AAXX 安盛 XAAX XXAA 新安盛 安讯士 AXXX XAXX XXAX XXXA XXXX

请注意,在最终程序中,我需要在每个 if 条件下执行大量操作,因此它不会是简单的字符串字符迭代,但首先我想让这个组合部分起作用。非常感谢您的帮助。

最佳答案

您可以使用内置库 itertools,它具有“组合”功能,或者您可以认识到您本质上是在表达二进制数:

for s in [bin(n)[2:].zfill(4) for n in xrange(2 ** 4)]:
    print s.replace('0','A').replace('1','X')

上面的代码:

  1. 接受从零 (0b0000) 到 2^4 - 1 (0b1111) 的数字范围,
  2. 将每个转换为字符串中的二进制表示(内置 bin 函数)
  3. 砍掉领先的'0b'
  4. 确保生成的字符串有足够的前导零
  5. 然后在 for 循环体中,将 1 和 0 转换为您的格式。

您所做的操作可以基于范围的数量,在这种情况下,您可以将字符串格式移动到循环体中(当然,如果您知道您要进行哪种操作,那将会有所帮助) d正在做)

for n in xrange(2 ** 4):
    if n & 0b1000:    # If the first character is 'X'
        # operations here
    if n & 0b0100:    # If the second character is 'X'
        # other operations
    # ... more checks/operations ...
    print bin(n)[2:].zfill(4).replace('0','A').replace('1','X')

这是一种不太直观的组合显示方式:

def gen(s):
    if len(s) == 4:
        print s
        return 
    gen(s+'A')
    gen(s+'X')
# which you would run with:
gen('')

关于python - 使用嵌套 for 循环的组合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24180486/

相关文章:

r - 将变量名称分配给具有多个变量的数据框中的非 NA

c++ - 你会如何迭代一个 vector ?

r - r中的项目组合数

python - 查找对(连接)的组合

python - 有没有办法从 Windows 单击调用 python?

python - 使用 Apache-flink 将处理后的流数据接收到数据库中

c++ - 为数组分配新值时系统崩溃

python - 如何以不区分大小写的方式通过 Python 替换字符串中的多个单词?

python - 从图像文件列表创建 pandas 数据框

javascript - 为设置为 1 的一对位生成所有组合?