python-3.x - 词表压缩
问题描述
我正在研究字符串的压缩算法(包含逗号分隔的单词列表)。结果将是一个格式为“字数”的字符串。例如:'a, a, b, c'-> 'a-2, b-1, c-1'
不知道为什么这不起作用
def word_compression(words):
words=words.split(",")
print(words)
prev=words[0]
count=0
#record=dict()
s=""
for i in range (len(words)):
word=words[i].strip()
if(word==prev):
count+=1
print(word,count)
else:
#new word
#record[prev]=count
print(word,prev)
if(s==""):
s=prev+"-"+str(count)
else:
s=s+", "+prev+"-"+str(count)
print("changed from: ",prev, word)
count=1
prev=word
print(prev,count)
s=s+", "+prev+"-"+str(count)
return s
解决方案
我更喜欢使用itertools.groupby
来获取计数的解决方案,然后用于', '.join
加入结果:
from itertools import groupby
from re import split
def word_compression(words):
words = split(r',\s*', words)
counts = (f'{word}-{sum(1 for _ in group)}' for word, group in groupby(words))
return ', '.join(counts)
print(word_compression("1,1,1,1,1,1, 2, 2, 2, 2, 3, 3, 1, 1, 1"))
# 1-6, 2-4, 3-2, 1-3
推荐阅读
- ffmpeg - 使用 ffmpeg 从帧列表创建 mp4 视频
- matlab - Matlab的PARFOR循环中不能对矩阵变量进行分类
- vba - 根据单元格值更改excel中的弧长
- arm - ARM下编译NEON代码出错
- regex - 按不同语言过滤 Google Analytics 上的流量
- javascript - 将 Ajax 成功数据存储到 javascript 变量中以在其他 js 函数中使用
- python - 如何使用 Python 和 Pytest 比较和测试字典列表中的特定键
- r - 通过 bash/batch 文件访问 Oauth Token
- combinations - 给定每个数字值范围的可能数字
- javascript - 有没有一种使用 Vue 路由器将 props 传递给父组件的好方法?