假设我有一个列表 [100, 210, 250, 300, 405, 430, 500, 1850, 1875, 2120, 2150]
我想删除任何以相同数字开头且长度相同的数字。
结果应为:[100, 210, 300, 405, 500, 1850, 2120]
我目前拥有的是:
for i in installed_tx_calc:
if (len(str(i)) == 3) and (str(i)[:1] == str(i-1)[:1]):
installed_tx_calc.remove(i)
elif str(i)[:2] == str(i-1)[:2]:
installed_tx_calc.remove(i)
我有一个 [862, 1930, 2496]
列表,我的代码输出 [1930]
。
我在搜索时找不到任何东西,但我觉得我遗漏了一些明显的东西。
感谢您的宝贵时间。
最佳答案
您可以使用列表理解创建新列表,使用 itertools.groupby :
from itertools import groupby
numbers = [100, 210, 250, 300, 405, 430, 500, 1850, 1875, 2120, 2150]
out = [next(group) for key, group in groupby(numbers, key=lambda n: (str(n)[0], len(str(n))))]
print(out)
# [100, 210, 300, 405, 500, 1850, 2120]
我们使用元组(第一个数字,数字的长度)进行分组,并保留每个组的第一个数字,这是我们通过 next(group)
获得的。
关于python - 如果第一个数字和长度相同,则从列表中删除数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51325630/