gpt4 book ai didi

python - 删除元组中的以下重复项

转载 作者:行者123 更新时间:2023-11-28 21:47:09 25 4
gpt4 key购买 nike

我有任意大小的元组。这是一个例子:

ax = ('0','1','1','1','2','2','2','3')

对于 x 轴标记,我想将此元组转换为:

ax = ('0','1','','','2','','','3')

所以重复项应该被删除,而元组大小应该保持不变。有没有简单的方法可以做到这一点?

最佳答案

In [12]: seen = set()

In [13]: [x if x not in seen and not seen.add(x) else '' for x in ax]
Out[13]: ['0', '1', '', '', '2', '', '', '3']

这是 Dave Kirby, here 建议的唯一化符的略微修改版本.


seen.add(x)添加 x到集seen . seen.add方法返回 None .所以在 bool 上下文中,(因为 bool(None)False ),not seen.add(x)总是 True .因此条件

x not in seen and not seen.add(x)

有一个 bool 值等于

x not in seen and True

相当于

x not in seen

所以条件表达式

x if x not in seen and not seen.add(x) else ''

返回 x如果x不在 seen 中并返回 ''如果x已经在seen (然后 x 被添加到 seen )。如果x not in seenFalse (也就是说,如果 x 已经在 seen 中)那么 seen.add(x)不被调用是因为 Python 的 and短路 - False and something 形式的任何表达式自动为 False无需评估 something .


这也可以写得不那么简洁,但没有那么复杂,就像

def replace_dupes(ax):
result = []
seen = set()
for x in ax:
if x in seen:
result.append('')
else:
seen.add(x)
result.append(x)
return result

ax = ('0','1','1','1','2','2','2','3')
print(replace_dupes(ax))
# ['0', '1', '', '', '2', '', '', '3']

关于python - 删除元组中的以下重复项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36935617/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com