Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/335.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何在列表中递增并用计数替换某些值_Python - Fatal编程技术网

Python 如何在列表中递增并用计数替换某些值

Python 如何在列表中递增并用计数替换某些值,python,Python,我试图通过一个列表递增,并将给定值的多次出现(按顺序)替换为它们发生的次数(大致范围为,1-3次出现的次数较小,4-6次出现的次数中等,6次以上出现的次数较多) 我正试图找到一个优雅的解决这个问题的办法,并希望得到任何指导。我浏览了itertools,但找不到适合的工具(我想) 任何帮助都将不胜感激。多谢各位 例如: testList=[1,2,2,1,1,2,1,4,1,2,2,2,2,2,1,2,2,2,2,2,2,2,2,2,1] 将成为 [1,“2小次数”,1,1,“2小次数”,1,4,

我试图通过一个列表递增,并将给定值的多次出现(按顺序)替换为它们发生的次数(大致范围为,1-3次出现的次数较小,4-6次出现的次数中等,6次以上出现的次数较多)

我正试图找到一个优雅的解决这个问题的办法,并希望得到任何指导。我浏览了itertools,但找不到适合的工具(我想)

任何帮助都将不胜感激。多谢各位

例如:

testList=[1,2,2,1,1,2,1,4,1,2,2,2,2,2,1,2,2,2,2,2,2,2,2,2,1]

将成为

[1,“2小次数”,1,1,“2小次数”,1,4,1,“2中次数”,1,“2大次数”]

就我所知,现在它只是检测2在序列中多次出现,并用字符串替换该序列,但我不知道如何从这个计数器移动到实际计数器,该计数器按范围和更优雅的代码样式对其进行存储(我确信有一种方法可以避免使用listLocation变量来跟踪列表索引)。此外,我无法确定如何检测列表的结尾,因为现在如果列表中的最后一个值是2,那么它将崩溃


任何帮助都将不胜感激,谢谢你

以下是我认为最简单的方法

a=[1,2,2,1,1,2,1,4,1,2,2,2,1,2,2,2,2,2,2,2,1]
b=[]
i=0

而我这里是我的解决方案。首先,让我们定义一个函数,返回要插入列表的消息:

def message(value, count):
    msg = '{value} {amount} amount of times'

    if 1 <= count <= 3:
        msg = msg.format(value=value, amount='small')
    elif 4 <= count <= 6:
        msg = msg.format(value=value, amount='medium')
    else:
        msg = msg.format(value=value, amount='large')

    return msg

没问题!如果这有帮助,请接受答案!Quick query=这只适用于不以2结尾的列表。如果尝试运行a=[1,2,2],它将不起作用,并且有索引错误。此外,如果运行,a=[1,2,2,5],它应该显示为中等次数,但由于某些原因,它显示为大量次数,对此的任何帮助都将不胜感激。您的意思是“遍历列表”。“增量”将为您提供
[2,3,3,2,…]
无论如何,您在这里寻找的是运行长度编码。这是一个奇妙而优雅的解决方案,谢谢您。
[1, '2 small amount of times', 1, 1, '2 small amount of times', 1, 4, 1, '2 large amount of times', 1, '2 large amount of times', 1]
def message(value, count):
    msg = '{value} {amount} amount of times'

    if 1 <= count <= 3:
        msg = msg.format(value=value, amount='small')
    elif 4 <= count <= 6:
        msg = msg.format(value=value, amount='medium')
    else:
        msg = msg.format(value=value, amount='large')

    return msg
def counter(values, value):
    count = 0
    results = []

    for i, v in enumerate(values):

        if v != value:

            if count:
                results.append(message(value, count))
                count = 0

            results.append(v)
            continue

        count = count + 1

        if i < len(values) - 1:
            continue

        results.append(message(value, count))

    return results
>>> values = [1, 2, 2, 1, 1, 2, 1, 4, 1, 2, 2, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1]
>>> counter(values, value=2)
[1,
 '2 small amount of times',
 1,
 1,
 '2 small amount of times',
 1,
 4,
 1,
 '2 medium amount of times',
 1,
 '2 large amount of times',
 1]