Сравнение строки с несколькими строками в Python3

#python #python-3.x #if-statement #conditional-statements

#python #python-3.x #if-оператор #условные операторы

Вопрос:

Я хочу знать, нет ли текстовой строки в переменных. А затем сравнить, есть ли другая текстовая строка. Переменные results , которые он может содержать, следующие: да, нет или? У меня есть следующий код:

 internet = result1
vpn = result2
zetas = result3

values = [internet, vpn, zetas]

    if any(v !== "?" for v in values):
        print("No exist ?")
    if any(v == "no" for v in values):
        print("Exist a NO")
    else:
        print("Good")
  

особенно для того, чтобы увидеть самый элегантный способ сделать это.

Комментарии:

1. Не могли бы вы, пожалуйста, использовать несколько примеров, чтобы продемонстрировать, что вы пытаетесь сделать и каков ожидаемый результат?

2. Похоже, вы ищете elif . А также, нет !== . Используйте == или != .

Ответ №1:

вы можете проверить value in list или value not in list

 values = (internet, vpn, zetas)

if "?" not in values:
    print("No exist ?")
if "no"  in values:
    print("Exist a NO")
else:
    print("Good")
  

Ответ №2:

Во-первых, предпочтительнее передавать выражения генератора вместо списков для подачи в цикл.

Во-вторых, хотя может быть много способов, хорошим способом было бы просто:

 values = (internet, vpn, zetas)
if "?" in (v for v in values):
  print("No exist ?")
  

Выражения генератора экономят память и время, что не критично для используемого скрипта, но полезно для больших объемов данных.

Комментарии:

1. вместо (v for v in values) вы можете использовать values if "?" in values:

2. Правильно! Но таким образом, это предотвратит обнаружение «?» внутри строк, я подумал, что это была бы хорошая функция!

3. (v for v in values) и values будет работать так же, поэтому нет никакой функции.

4. На самом деле это неверно. Но вы можете попробовать это. python values = ["qwerty", "asdf"] if "qwert" in values: print('1') if "qwert" in (v for v in values): print('2') Вы увидите, что будет выведено 2.

5. Мой python ничего не печатает для обеих версий. И это правильный результат, потому что в "qwert" списке ["qwerty", "asdf"] его нет. Если я использую if "qwerty" в обеих версиях, то я вижу 1 и 2 .

Ответ №3:

Я проверил, не будет ли обнаружен запрос, который у вас был относительно вопросительного знака в кавычках, с помощью сравнения массива [x in B for x in A]

 #I assigned values to your variables to test
result1 ='?'
result2="no"
result3 = "yes"

internet = result1
vpn = result2
zetas = result3

#created an array with above values in it both in string format and as variable values (appended a number just for test)
A = [internet, 'no', '?', 'yes', vpn, zetas, '8']

#array of sample strings
B = ['?', 'no', 'yes']

exists = [x in B for x in A]
print (exists)
  

Когда результаты сравнения были напечатаны, это дало: [True, Истинно, True, True, True, True, True, False]. Однако, если были дополнительные кавычки, например '"?"' , сравнение для этого печаталось как False. (Элементы, заключенные в одинарные кавычки, оцениваются так же, как двойные кавычки ..)

Не стесняйтесь запускать / переназначать значения / тестировать и т.д. По своему усмотрению. (возможно, это не тот ответ, который вы ищете, но надеюсь, это поможет)