python - 为列表中的重复元素添加空格
问题描述
我有以下列表1:
['Tom', 'Michael', 'Tom', 'Tom']
我想为重复值添加一个空格以获得以下输出:
['Tom', 'Michael', 'Tom ', 'Tom ']
由于汤姆重复了 2 次,第一次它有 I 空间,第二个 2 空间在最后
我喜欢使用这样的一行代码
[ f'{x} ' for x in list1 if .... ]
但不太确定如何将其应用于我的案例
这是我到目前为止所尝试的:
from collections import Counter
d = Counter(list1)
res = [k for k, v in d.items() if v > 1]
print([ f'{x} ' for x in res ])
有没有更有效的方法来做到这一点,包括添加空间?
解决方案
因为要添加空格作为每个元素的出现次数,所以可以使用count
列表方法。然后将此计数乘以" "
:
l = ['Tom', 'Michael', 'Tom', 'Tom']
res = []
for i in range(len(l)):
cnt = l[:i].count(l[i])
res.append(l[i] + " "*cnt)
或者在一行中:
res = [l[i] + " " * l[:i].count(l[i]) for i in range(len(l))]
两者都按预期给出:
['Tom', 'Michael', 'Tom ', 'Tom ']
另一种不同的方法是一次性使用defaultdict
和“记住”计数 ( O(n)
),而不是对每个元素进行计数 ( O(n^2)
):
from collections import defaultdict
l = ['Tom', 'Michael', 'Tom', 'Tom']
res = []
d = defaultdict(int)
for x in l:
cnt = d[x]
res.append(x + " "*cnt)
d[x] = cnt + 1
这样,如果第一次看到一个元素,它的计数将被初始化为0
.
或者,最后,没有任何进口。我们可以只使用常规字典并利用该setdefault
方法:
l = ['Tom', 'Michael', 'Tom', 'Tom']
res = []
d = {}
for x in l:
res.append(x + " "*d.setdefault(x, 0))
d[x] += 1
推荐阅读
- spring-boot - Thymleaf 控制器请求映射绑定问题
- python - pd.Series.explode 和 ValueError:无法从重复的轴重新索引
- java - JDBC - 从物化视图中选择查询不起作用
- javascript - Postgres 连接池在一段时间后耗尽
- automation - 将鼠标悬停在 cypress 中的 svg 上并测试工具提示
- python - 视网膜图像中的血管分割
- google-sheets - Google表格在where子句中的选择字符串内查询如何使用带有日期的参考单元格作为过滤器
- python - 我是 python 新手,没有以前的编码经验。我的程序应该根据年龄显示票价。为什么它不起作用?
- javascript - 如何在 Sapper 上使用 worker_threads?
- matlab - matlab中的采样率