| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1092 人关注过本帖
标题:[求助]有关有条件的组合问题
只看楼主 加入收藏
阿智兄
Rank: 1
等 级:新手上路
帖 子:36
专家分:0
注 册:2021-3-8
结帖率:87.5%
收藏
已结贴  问题点数:20 回复次数:4 
[求助]有关有条件的组合问题
要求生成 m选n的所有组合,
m是放在一个input文本里,如下:
所输出的组合装在R个文件中,每个文件装Y行(R是总的组合个数,Y是每个文件所装的组合个数。)
X是对输出的条件限制:是否输出连续号码的组合
当X=2 即表示将2个和2个连号以上的组合排除掉再将组合输出到文本中.

input.txt 文件内容:
txt001
txt002
txt003
txt004
txt005
txt006
txt007
txt008
txt009
txt010
txt011
txt012
txt013
txt014
txt015
txt016
txt017
txt018
txt019
txt020
txt021
txt022
txt023
txt024
txt025
txt026
txt027
txt028
txt029
txt030
txt031
txt032
txt033
txt034
txt035
txt036
txt037
txt038
txt039
txt040
txt041
txt042
txt043
txt044
txt045
txt046
txt047
txt048
txt049
txt050
搜索更多相关主题的帖子: 有条件 文件 输出 文本 组合 
2021-03-08 20:27
fall_bernana
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:贵宾
威 望:17
帖 子:243
专家分:2106
注 册:2019-8-16
收藏
得分:0 
回复 楼主 阿智兄
程序代码:
m:['txt001', 'txt003', 'txt004', 'txt006', 'txt007', 'txt008', 'txt010']
分组:[['txt001'], ['txt003', 'txt004'], ['txt006', 'txt007', 'txt008'], ['txt010']]
['txt001'] 写入1号文件
['txt001'] 写入2号文件
['txt001'] 写入3号文件
['txt003', 'txt004'] 写入2号文件
['txt003', 'txt004'] 写入3号文件
['txt006', 'txt007', 'txt008'] 写入3号文件
['txt010'] 写入2号文件
['txt010'] 写入3号文件
['txt010'] 写入1号文件


是这个意思吗?
2021-03-09 12:14
阿智兄
Rank: 1
等 级:新手上路
帖 子:36
专家分:0
注 册:2021-3-8
收藏
得分:0 
回复 2楼 fall_bernana
非常感谢你的回复。
生成在m个中选n个的所有组合。
假如m如下:
txt001
txt002
txt003
txt004
txt005
举例: 假如n=3
那么输出的所有组合是:
txt001,txt002,txt003
txt001,txt002,txt004
txt001,txt002,txt005
txt001,txt003,txt004
txt001,txt003,txt005
txt001,txt004,txt005
txt002,txt003,txt004
txt002,txt003,txt005
txt002,txt004,txt005
txt003,txt004,txt005
假如每个文本装Y=2行,那么就需要用5个文本装完,即:out001.txt out002.txt out003.txt out004.txt out005.txt
又假如X=2 即表示将2个和2个连号以上的组合排除掉再将组合输出到文本中.那么上面的组合中去掉X=2的连号后剩下的组合只有以下这些:
txt001,txt003,txt005
输出到文本就只有out001.txt
2021-03-11 00:43
fall_bernana
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:贵宾
威 望:17
帖 子:243
专家分:2106
注 册:2019-8-16
收藏
得分:20 
回复 3楼 阿智兄
程序代码:
import re
from itertools import combinations,permutations
pattern=(r'(\d+)')
m=['txt001','txt002','txt003','txt004','txt005']
print(m)
result=[]
X=2 #表示将2个和2个连号以上的组合排除掉再将组合输出到文本中
Y=2 #每个文本装Y=2行
temp=list(combinations(m,3))#排列组合所有可能
for txt1 in temp:
    checkword=""
    check=[]
    loopcount=0
    for txt in txt1:
        if checkword=="":
            checkword=pattern.findall(txt)[0]
            loopcount=1
        else:
            patterntxt=pattern.findall(txt)[0]
            if int(patterntxt)-int(checkword)==1:#连续的
                checkword=patterntxt
                loopcount+=1
                if loopcount>=X:
                    check=[]
                    break
            else:
                checkword=patterntxt
                loopcount=1
        check.append(txt)
    if check:
        result.append(check)
print(result)
for i in range(len(result)):
    filename='out%03d.txt' % (i//Y)
    with open (filename,"a+") as fileout:
        fileout.write(','.join(result[i])+"\n")
收到的鲜花
  • 阿智兄2021-03-11 12:23 送鲜花  1朵   附言:非常感谢!
2021-03-11 11:51
阿智兄
Rank: 1
等 级:新手上路
帖 子:36
专家分:0
注 册:2021-3-8
收藏
得分:0 
回复 4楼 fall_bernana
非常感谢你的解答,你的解答完美的解决了问题。再次感谢!
2021-03-11 12:24
快速回复:[求助]有关有条件的组合问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017501 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved