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,“2中次数”,1,“2大次数”] 就我所知,现在它只是检测2在序列中多次出现,并用字符串替换该序列,但我不知道如何从这个计数器移动到实际计数器,该计数器按范围和更优雅的代码样式对其进行存储(我确信有一种方法可以避免使用listLocation变量来跟踪列表索引)。此外,我无法确定如何检测列表的结尾,因为现在如果列表中的最后一个值是2,那么它将崩溃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,
任何帮助都将不胜感激,谢谢你以下是我认为最简单的方法
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]