Python - 在列表推导中移除小于两位数的整数

0 投票
3 回答
4279 浏览
提问于 2025-04-18 17:30

我正在这个子版块做一个Python初学者项目:http://www.reddit.com/r/beginnerprojects。在这个任务的某个部分,我需要从一个列表中去掉所有小于两位数的整数。我不太确定自己哪里出错了。我知道我可以直接改变列表中的范围,但我想尽可能多地运用我的技能。

numbers = [x for x in range(1,1001)]

def two_or_more_digits():
    for num in numbers:
        if len(str(num)) < 2:
            numbers.remove(num)
    print (numbers)

我在使用Python 3。

谢谢。

3 个回答

0

你可以使用列表推导式:

numbers = [x for x in range(1,1001) if len(str(x)) >= 2]

或者使用 filter 函数:

all_nums = [x for x in range(1,1001)]
needed_nums = filter(lambda i: len(str(i)) >= 2, all_nums]

如果所有的元素都是整数,那你就不需要把它们转换成字符串再根据长度来过滤。你可以直接用 x >= 10 来代替 len(str(x)) >= 2

0

你在遍历 numbers 数组的时候还在修改它……这样做对吗?

如果你想提升自己的技能,可能需要把条件写成一个判断式,然后用它来做 filter,或者在列表推导式中使用:

filtered = filter( lambda x: len(str(num)) < 2, numbers )

filtered2 = [x for x in numbers if len(str(x)) < 2]

(或者更好的是:用 itertools.ifilter 来代替)

1

你可以不用把数字转换成字符串再计算它的长度,而是用简单的除法来解决这个问题:

[i for i in range(1,1001) if i // 10 > 0]

这样做会返回一个包含从10到1000(包括10和1000)的整数的列表。

撰写回答