简化python中的列表? [复制]
Posted
技术标签:
【中文标题】简化python中的列表? [复制]【英文标题】:Simplifying lists in python? [duplicate] 【发布时间】:2018-04-17 08:27:01 【问题描述】:我是编码新手,想知道是否有办法简化:
if "!" in name or "$" in name or "%" in name or "^" in name or "&" in name or "*" in name or "(" in name or ")" in name or "_" in name or "-" in name or "+" in name or "=" in name:
points = points + 1
谢谢
【问题讨论】:
if any(c in name for c in '!$%^'): ...
。 (为简洁起见,我没有输入所有字符)
@mgilson 如果你想要简洁,你会添加这几个字符而不是添加“(为了简洁起见,我没有输入所有字符)”:-P
这是基于 mgilson 的单行代码:points += any(c in name for c in "!$%^&*()_-+=")
。这是因为:如果为假:点 += 0,真:点 +=1。也感谢 Stefan Pochmann。
@StefanPochmann -- 啊,但是您忘记了交叉引用以确保我得到所有信息所需的时间。
【参考方案1】:
chars = set("!$%^&*()_-+=")
if any((i in chars) for i in string):
points += 1
【讨论】:
糟糕,本来是一个建议,但变成了一个编辑。当 int(True/False) 评估为 1/0 时,您可以直接添加点。 +1 @mgilson 的评论中的ctrl c - ctrl v
并在布尔语句周围添加了多余的()
...
@jojo 任何地方都没有元组。
删除了@AntonvBR 的编辑,似乎是一个单独的答案,而不是我的补充
没关系。这不是另一个答案,而实际上只是在一行中添加点的一种方式。 int(boolean) 计算结果为 0/1。因此不需要 if 语句。错误:点 += 0,正确:点 +=1【参考方案2】:
您可以编写一个简单的函数来实现这一点。
def is_included(characters, sentence):
for character in characters:
if character in sentence:
return True
return False
正如 mgilson 所说,您也可以使用 any
关键字。但是,由于您是编程新手,我建议您学习关键字算法。
【讨论】:
Upps 应该是 True and False my baf【参考方案3】:你可以使用正则表达式:
import re
if re.findall('[\!\$\%\^\&\*\_\-\+\=]', name):
points += 1
【讨论】:
你打败了我的答案。 :) @StefanPochmann 请看我最近的编辑 是的,这行得通。但是超级丑。那里实际上只有一个字符需要转义(或将其放在第一位或最后一位)。另外,为什么findall
而不是search
?
Sheesh,在过去的 C 时代,我们有 strstr
来处理这类事情。而且它很有趣。
@yacc 嗯? strstr
没有做这正在做的事情......以上是关于简化python中的列表? [复制]的主要内容,如果未能解决你的问题,请参考以下文章