我在这个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。
谢谢。
答案 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
)