尝试查看列表中的一项是否在另一项中

2024-06-01 21:28:06 发布

您现在位置:Python中文网/ 问答频道 /正文

我这里有两张单子

cons=['qwe','wer','ert','rty','tyu','yui','uio','iop','asd','sdf','dfg',
      'fgh','ghj','hjk','jkl','zxc','xcv','cvb','vbn','bnm']

print([i for e in alphabet for i in cons if e in i])

字母表是用户输入

例如,如果用户要键入qwe,那么shell将打印'qwe','wer','ert','rty'(至少有一个字母相似的所有项目),但我只希望它打印cons中的项目,如果输入的所有项目中有一个与之相似。例如,打印“qwe”

我该怎么做?你知道吗

编辑:为了让这更清楚,如果我要输入'qwer',我希望输出是'qwe'和'wer'


Tags: 项目用户inforuio单子yuiiop
3条回答

如果您不关心列表中输出字符串的顺序,那么您当然可以:

inputs = ['qwe', 'wer', 'ert', 'rty', 'tyu', 'yui', 'uio', 'iop', 'asd', 'sdf',
          'dfg', 'fgh', 'ghj', 'hjk', 'jkl', 'zxc', 'xcv', 'cvb', 'vbn', 'bnm']

def string_intersections(input_string):

    def intersect(string):
        input_letters = set(input_string)
        string_letters = set(string)
        has_intersection = input_letters == string_letters
        return has_intersection

    result = list(filter(intersect, inputs))
    return result

string_intersections("boo")
cons=['qwe','wer','ert','rty','tyu','yui','uio','iop','asd','sdf','dfg',
      'fgh','ghj','hjk','jkl','zxc','xcv','cvb','vbn','bnm']

更新(基于OP注释)如果您需要cons中的字符串与alphabet的子字符串完全匹配,那么此代码只需检查cons中的字符串是否是alphabet(完全匹配)的子字符串,如果是,则包括它:

print([sub for sub in cons if sub in alphabet])

例如:alphabet='qwer',输出=['qwe', 'wer']

但是,基于OP,这个测试检查cons字符串中的所有字母是否都存在于alphabet中(不一定以确切的顺序和频率)。它使用all()方法,如果传递的所有参数都是True,则返回True。你知道吗

print([sub for sub in cons if all(let in alphabet for let in sub)])

解释:let in alphabet根据每个字母let是否在用户输入字符串alphabet中返回True或False。对consfor let in sub子字符串中的每个字母执行此操作。因此,如果sub字符串中的所有字母都在字母表中,则将检查来自用户输入的每个字母,并仅计算为True。如果此检查的结果为True,则子字符串将包含在结果中并打印。如果来自con的子字符串与用户输入alphabet的子字符串长度不同,则此函数有效。你知道吗

如果alphabet='er',output=[](没有字符串具有alphabet中的所有字母)

如果字母表='qwer',输出=['qwe', 'wer']

你找到了吗?地址:

print ([x for x in cons  if sorted(list(x)) == sorted(list(alphabet))])

或者如果需要找到不完全的巧合

print ([x for x in cons  if ''.join(sorted(list(alphabet))) in ''.join(sorted(list(x)))])

相关问题 更多 >