Python:检查列表中是否有任何子字符串的优雅解决方案?

标签 python string

<分区>

在关闭此问题之前,请尝试理解这个问题 - 它有点不同,但看起来像是很多被否决的问题。

我正在寻找一种简单的方法来检查字符串的任何子字符串是否在字符串列表中。输入类似于 2018_JAN_BGD,我想将其中的月份信息转换为(年)季度信息。例如,Q1 将是一月、二月和三月。所以我正在寻找一种方法来检查 2018_JAN_BGD 中的任何子字符串是否包含 JANFEBMAR。我可以通过编写 12 个(全年)带有 or 的 if-else 子句来做到这一点,但我觉得 Python 中有更优雅的解决方案。我正在尝试:

def tellQuarter(month):
    Q1 = ('JAN','FEB','MAR')
    Q2 = ('APR','MAY','JUN')
    Q3 = ('JUL','AUG','SEP')
    Q4 = ('OCT','NOV','DEC')
    if any(for mon in Q1 in month):
        return ("Q1")
    if any(for mon in Q2 in month):
        return ("Q2")

这当然是不正确的(语法无效),但我不知道如何正确放置它。基本上,我想遍历 Q1,并检查是否有任何字符串是 month 的子字符串。

我的意思是我能做到

for mon in Q1:
    if mon in month:
        return "Q1"

但是没有更优雅的单行解决方案吗?

最佳答案

作弊,但使用字典,将月份映射到季度:

monthsToQuarters = {
    'JAN': 'Q1','FEB': 'Q1','MAR': 'Q1',
    'APR': 'Q2','MAY': 'Q2','JUN': 'Q2',
    'JUL': 'Q3','AUG': 'Q3','SEP': 'Q3',
    'OCT': 'Q4','NOV': 'Q4','DEC': 'Q4'}

给你:

>>> monthsToQuarters['JAN']
'Q1'

你可以使用类似的东西去掉月份:

>>> '2018_JAN_BGD'.split('_')[1]
'JAN'

关于Python:检查列表中是否有任何子字符串的优雅解决方案?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48885192/

相关文章:

string - 用于查找包含所有查询词的最小子串的高效数据结构

C 在 while 循环中连接字符串

javascript - Javascript中给定字符之间的字符串子串集

python - xgb.plot_tree 字体大小 python

python - 如何使用 QStyledItemDelegate 呈现列的 QIcons?

java - 输出间隔并将数字分解为小时和分钟

c++ - 如何实例化C++成员字符串引用

python - 在 Tensorflow 中计算两组向量的余弦相似度

python - 将 1D 函数扩展到 3 个维度以进行数据窗口

python - 如何在Python中增量打印字符串中的字符