python - 如果第一个数字和长度相同,则从列表中删除数字

标签 python python-3.x list-comprehension

假设我有一个列表 [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/

相关文章:

javascript - 在 Google App Engine 中使用 JavaScript 将可下载文件添加到另一个页面

python - numpy 直方图索引

python - 在 Python 列表理解中使用带有 if/elif 语句的 'for' 循环

python - 列表理解for循环+三元运算for循环?

python - Numpy sum() 函数 + 推导式 : int32 or in64?

python - 下载特定Python模块时出现问题 'Pip'

python - 无法导入 'pymongo'

python - 如何迭代字符串中的某些字符和其他字符在python中保持相同位置

python - gensim入门错误: No such file or directory: 'text8'

python - 是否可以在 Python 列表理解中编写多个语句?