Python - 使用少于两位的数字删除列表推导中的整数

时间:2014-08-16 14:24:38

标签: python list

我在这个subreddit中执行了一个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 :(得分:1)

您可以使用简单的除法,而不是将数字转换为字符串并计算其长度:

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

这将返回一个包含10到1000(含)的整数的列表。

答案 1 :(得分: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]

如果所有元素都是整数,则无需将其转换为str并按长度过滤,您只需使用x >= 10代替len(str(x)) >= 2

答案 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