【问题标题】:Avoid chained numbers when printing lists打印列表时避免使用链式数字
【发布时间】:2014-10-31 07:38:04
【问题描述】:

我创建的代码从组合中生成了一个包含 15 个数字的列表,因此在对其进行排序后,可以看到一些序列带有很多链接的数字,例如:

[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 15, 16, 20]

我正在想办法控制它并只打印最多包含 4 个链式数字的列表:

[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 15, 16, 20]

(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11) >>>> 11 Chained numbers: 1 to 11.
So it won't be stored in file.txt.


[1, 2, 3, 6, 7, 8, 9, 11, 12, 16, 17, 18, 19, 22, 23]

(1, 2, 3) >>>> 3 chained, OK
(6, 7, 8, 9) >>>> 4 chained, OK
(11, 12) >>>> 2 chained, OK
(16, 17, 18, 19) >>>> 4 chained, OK
(22,23) 2 chained, OK. 
So this list will be stored in the file

你们能给我一个想法吗?灯?

我创建的代码,它生成一个包含 25 个列表中 15 个数字的所有可能组合的文件:

import itertools
my_file = open('file.txt', 'w')

ALL_25 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25]

for subset in itertools.combinations(ALL_25, 15):
    sort_subsets = sorted(subset)
    my_file.write("{0}\n".format(sort_subsets))  
    print(sort_subsets)
my_file.close()

【问题讨论】:

  • 我不明白你的问题。例如,如果输入是[1, 2, 3, 4, 5, 6, 7, 8, 9, 20],那么输出应该是[1, 2, 3, 4, 6, 7, 8, 9, 20] 还是[1, 2, 3, 4, 9, 20] 或其他?你想突出“跳跃”吗? [1, 2, 3, 4, ..., 6, 7, 8, 9, 20][1, 2, 3, 4, ..., 9, 20]?
  • 我明白了,我发布时出了点问题。让我解释一下,我有一个代码可以从 25 个数字生成大量 15 个组合,而不是将所有组合保存在 txt 文件中。
  • 所以它会创建像 [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15] 这样的列表我想做的是消除具有上述链接数字的组合,这将只保存最多具有 4 个链接数字的组合,例如:[1、2、3、5、6、9、10、11、12、15、16、17, 18, 21, 25] 看到,(1, 2, 3) 有 3 个数字在链中,(5, 6) 有 2,(9, 10, 11, 12) 有 4。所以如果有一个列表有 5 或像 (9, 10, 11, 12, 13) 这样的链中更多的数字将被淘汰

标签: python list chained


【解决方案1】:

如果您可以将链转换为其连续元素之间的差异,则更容易识别增量序列,即[1,2,3,4,7,8] 被转换为[1,1,1,3,1]。此外,通过将其转换为字符串,可以更轻松地搜索模式 111

import numpy as np                                          
import re                                                   

def validate(seq):                                          
    stl = "".join(np.diff(seq).astype(str))                 
    for x in re.findall("[1]+",stl):                        
        if len(x)>3:                                        
            return False                                    
    return True                                             

print validate([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 15, 16, 20])
print validate([1, 2, 3, 6, 7, 8, 9, 11, 12, 16, 17, 18, 19, 22, 23])

输出

False
True

【讨论】:

  • 但它似乎缩短了列表,我在这里做的是生成一个 txt 文件,其中包含所有可能的组合与一些数字,而不是我想要做的是删除这些数字序列链接,以减少文件中的组合数量。所以我的代码运行良好,并在文件中的每一行生成一个列表,每个列表都有不同的数字,所以我只想“删除”(不将其保存在文件中)链接有四个以上数字的列表.
  • @CairoLievore,您是说您有多个列表并且想要删除所有包含序列号的列表吗?那你能更新你的问题吗?
  • 快到了,我的代码生成了列表,所以我试图弄清楚如何在每个生成的列表打印出来并保存在文件中之前检查它
  • @CairoLievore,由于您要提取组合并且顺序在这里并不重要,您可以尝试使用random.sample()从列表中采样元素
  • 顺序不重要,但不能重复数字。看看我创建的代码,在 python idle 中运行它,它会生成很多列表并将其存储在 file.txt 中。所以我只想删除带有链号的列表,这很重要,并且会消除很多不必要的列表。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-27
  • 2019-12-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多