【问题标题】:How to filter a list via specific positioning of variable letters如何通过可变字母的特定定位过滤列表
【发布时间】:2021-05-05 23:50:07
【问题描述】:

在单词/列表的确切位置使用变量过滤列表的最 Pythonic 方式是什么?

例如如果我的列表是[HELLO, JELLO, JUUNO, ELNOO],我将如何过滤列表以查找在单词的特定位置包含“EL”的任何单词,但排除字母位置不正确的单词?因此,如果我要在单词的位置 2 和 3 中过滤“EL”,我希望它输出 [HELLO, JELLO] 但排除 [ELNOO]

wordlist = ['HELLO', 'JELLO', 'JUUNO', 'ELNOO']

#flter wordlist for 'EL'in position 2 and 3
#filter wordlist for starting with 'J' and ending with 'O'
varA = 'E'
varB = 'l'
varC = 'J'
varD = 'O'

我考虑过导入 re 并使用re.search,有更好的方法吗?

【问题讨论】:

  • 你可以使用正则表达式。搜索re
  • 我在帖子的最后一行说过!
  • 所以@match 只在你知道单词并且需要非常具体的东西时才写
  • 对字符串使用 index() w3schools.com/python/ref_string_index.asp
  • 我是用这个项目学习Python的,我希望我一开始就知道索引函数,我使用了一个冗长的多嵌套循环来计算列表中每个字母的频率,我本可以只使用索引。谢谢你!

标签: python


【解决方案1】:

对于这样一个简单的固定字符串,切片比较可能是最简单的:

words = ['HELLO', 'JELLO', 'JUUNO', 'ELNOO']
[x for x in words if x[1:3] == 'EL']

【讨论】:

    【解决方案2】:

    如果您需要将@match 的答案作为函数进行扩展

    words = ['HELLO', 'JELLO', 'JUUNO', 'ELNOO']
    
    filter_word = lambda wordlist, keyword, pos1, pos2: [x for x in wordlist if x[pos1-1:pos2] == keyword]
    filtered_words = filter_word(words, "EL", 2, 3)
    print(filtered_words)
    

    【讨论】:

    • 过滤器是关键字
    • @Ido 是的,我的错误更正了
    • 它适用于 'filter =' 但不适用于 'filtered_word =' 但这是一个非常酷的答案,将尝试理解它!
    猜你喜欢
    • 2019-02-04
    • 2023-03-17
    • 2018-11-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-25
    • 2016-04-03
    相关资源
    最近更新 更多