无论如何,我可以检查python中字符串的一部分是否在另一个字符串中吗? (初学者)

时间:2019-06-16 15:15:07

标签: python

假设我们有一个字符串“ abc”和另一个字符串“ bcd”。如果我在'bcd'中执行'abc',它将返回false。我想说的是'bcd'字符串中是否有'abc'字符,而不是返回true。 (蟒蛇) 编辑:谢谢您的拼写更改。这让我感到愚蠢。他们是错别字。

我尝试使用for循环遍历字符串,但这很笨拙,我认为这不是一个好习惯。无论如何,我无法使其灵活到足以满足我的需求。

 import random
 symb1 = random.choice('abc@') # I am trying to test if it chose AL one 
 # symbol
 symb2 = random.choice('abc!')
 mystring = (symb1+symb2) #lets say mystring is 'a!'
 if mystring in '@!' # I want to test here somehow if part of mystring is 
 # in @!

我希望它输出true,而输出是false。我知道为什么,我只需要帮助就可以创建一种方法来测试mystring中的符号

4 个答案:

答案 0 :(得分:2)

在进行in检查时迭代一个字符串:

any(c in "@!" for c in mystring)

“'@!'中的mystring中有c吗?”

答案 1 :(得分:1)

您可以使用列表推导。 例子;

>>> a = 'abc'
>>> b = 'bcd'
>>> [letter for letter in a if letter in b]  # list comprehensions
['b', 'c']
>>> any(letter for letter in a if letter in b)  # generator expression
True
  如@asikorski所述;更改为使用生成器表达式,以便循环在第一个匹配项时停止。

答案 2 :(得分:0)

好吧,这种理解更有意义,但我决定做一个更扩展的for循环。我找到了使它不那么可怕的方法。我只是在教一个朋友python,我希望他能够更轻松地阅读代码。这是程序中的代码部分。

def punc():
    characters = int(input('How long would you like your password to be? : '))
    passlist = []
    for x in range(characters):
        add = random.choice(string.ascii_letters + '@@@@@$$$$$~~~~!!!!!?????')
        passlist.append(add)
    l = []
    for x in passlist:
        if x in ['@','$','~','!','?']:
            l.append(0)
    if len(l) == 0:
        punc()
    else:
        print(''.join(passlist))

答案 3 :(得分:0)

解决方案很少:

  • 最好的(有效的和 pythonic 的):
if any(char in 'bcd' for char in 'abc'):
    ...

使用生成器+内置any。它不必创建具有列表理解功能的列表,也不必浪费时间来收集两个字符串中的所有字母,因此它的存储效率很高。

  • 无聊的人(〜C风格):
def check_letters(word1, word2):
    for char in word1:
        if char in word2:
            return True
    reeturn False

if check_letters('abc', 'bcd'):
    ...

很明显。

  • 花哨的人
if set(list('abc')) & set(list('bcd')):
    ...

这个使用一些技巧list将字符串转换为字母列表,set从列表中创建一组字母。然后使用&运算符创建两个集合的交集,并且如果交集中有任何元素,则if的条件求值为True。 但是,它不是很有效。它必须创建两个列表和两个集合。