简化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中的列表? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

Python 类中的列表理解范围规则是啥? [复制]

如何使用 Python 转换列表中的多个列表? [复制]

Python 列表推导中的“或”是啥意思? [复制]

Python - 如何按每个列表中的第四个元素对列表列表进行排序? [复制]

如何将一个列表复制到 python 中的另一个列表中?

python中的列表是不是有类似.replace()的方法? [复制]