Python - 在列表推导中移除小于两位数的整数
我正在这个子版块做一个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)的整数的列表。