首页 > 解决方案 > 如何从 Python 中的迭代列表理解中排除某个值?

问题描述

我试图从迭代列表理解中排除某个值(特别是空格“”),但我不确定如何在列表理解中执行此操作。

我正在构建一个简单的密码生成器,我知道以后如何通过执行 if else 语句来执行此操作,但我不太确定如何在 passcharacters.append(c) 部分执行此操作。我希望它能够将所有 ASCI 字符与空格分开。

import random as rd

passlength = int(input('How long should the password be?:\n'))

passcharacters = []

for c in (chr(i) for i in range(32,127)):
    passcharacters.append(c)
print(passcharacters)

secure_random = rd.SystemRandom()

password = ""
for x in range(passlength):
    character = secure_random.choice(passcharacters)
    password = password + character

print("\nYour password is: \n"+password)

标签: pythonalgorithm

解决方案


你应该做一个直接的列表理解而不是追加。列表推导式和生成器表达式都支持条件:

passcharacters = [chr(i) for i in range(32,127) if chr(i) != ' ']

另一种更具可读性的方式是:

import string

passcharacters = list(string.printable.strip())

这是您想要的相同字符,只是顺序不同。您可以确认这一点

set(string.printable.strip()) == {chr(i) for i in range(32,127) if chr(i) != ' '}

这是True


推荐阅读