python - 如何从 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)
解决方案
你应该做一个直接的列表理解而不是追加。列表推导式和生成器表达式都支持条件:
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
。
推荐阅读
- c# - 通过列表递归不会按预期更新对象
- laravel - Laravel - AWS Beanstalk - 存储符号链接不起作用(403 错误)
- c - 将输入部分存储在不同的变量中
- wpf - 触发器,未在自定义 ListBox 的 ItemTemplate 中触发的命令
- c# - 在 AZURE 或本地部署 .net core 3.0
- python - 有没有办法在文本周围插入花括号以使其成为字符串格式的字典?
- javascript - history.replace() 在 auth0 类和 react-router v4 中不起作用
- python - 打印python中出现次数最多的数据的名称和计数
- angular - 如何以编程方式更改 ionic v4 中的切换
- javascript - 修复 JS 代码:将复选框中的多个值附加到 url