Як перевірити, порожня str (змінна) чи ні?


79

Як зробити:

if str(variable) == [contains text]:

хвороба?

(або щось інше, тому що я майже впевнений, що те, що я щойно написав, абсолютно неправильне)

Я намагаюсь перевірити, чи є ( random.choiceз мого списку) ["",](порожнім) чи містить ["text",].


ти маєш на увазі if str(variable) == "my text":?
Саймон Бергот

Ви, здається, трохи розгублені, я б порадив вам прочитати підручник з python .
Рік Поджі,

Відповіді:


155

Ви можете просто порівняти свій рядок із порожнім рядком:

if variable != "":
    etc.

Але ви можете скоротити це наступним чином:

if variable:
    etc.

Пояснення: ifФактично працює, обчислюючи значення для логічного виразу, який ви йому надаєте: Trueабо False. Якщо ви просто використовуєте ім'я змінної (або буквальний рядок на зразок "привіт") замість логічного тесту, правило: Порожній рядок вважається False, а всі інші рядки вважаються True. Порожні списки та нульове число також вважаються хибними, а більшість інших речей вважаються істинними.


Хе-хе, я якось розумію принцип, що стосується річей If, True і False. Редактор тригерів Warcraft 3: 'if (цей блок дорівнює цій одиниці) == True'
user1275670

Я здогадуюсь, ви також можете залишити == Trueчастину в редакторі Warcraft.
alexis

Так. Ніколи насправді не думав про це хе-хе, але це, безумовно, корисно.
user1275670

Це не ТЕ ЖЕ. Не роби цього. У [14]: a = "" У [15]: якщо a.replace ('', ''): ...: друк 1 ...: У [16]: якщо a.replace ('', ' ') == "": ...: print 1 ...: 1
Бретт Хардін,

1
О, правильно, що сказав @AndreaBergonzo: Коли ви порівнюєте рядок із "", ви перевіряєте, чи він порожній - що вважається False.
alexis

19

"Пітонічний" спосіб перевірити, чи рядок порожній:

import random
variable = random.choice(l)
if variable:
    # got a non-empty string
else:
    # got an empty string

12

Порожні рядки за замовчуванням хибні:

>>> if not "":
...     print("empty")
...
empty

11

Просто скажіть if sабо if not s. Як і в

s = ''
if not s:
    print 'not', s

Отже, у вашому конкретному прикладі, якщо я це правильно розумію ...

>>> import random
>>> l = ['', 'foo', '', 'bar']
>>> def default_str(l):
...     s = random.choice(l)
...     if not s:
...         print 'default'
...     else:
...         print s
... 
>>> default_str(l)
default
>>> default_str(l)
default
>>> default_str(l)
bar
>>> default_str(l)
default

Я не розумію. отже, якщо я роблю "variable = random.choice (list)", а змінна порожня "", то я можу просто виконати умову "if variable:" і ... так, я не отримую нічого іншого з того, що ви писали ...
user1275670

@ user1275670, схоже, ти зрозумів. Але я додав ще один приклад про всяк випадок. Коротше ''оцінює до False, тому, якщо ви хочете отримати, Trueколи sце порожній рядок, ви говорите if not s.
senderle

6

Для python 3 ви можете використовувати bool ()

>>> bool(None)
False
>>> bool("")
False
>>> bool("a")
True
>>> bool("ab")
True
>>> bool("9")
True

Це було б ідеально, але bool(0)поверненняFalse
kaushal agrawal

1
@kaushalagrawal bool(0)повернення Falseце очікувано для мене. Чому не слід?
Thai Tran

Правда, я не пам’ятаю / не розумію, чому я так почувався
kaushal agrawal

6

Деякий час у нас залишається більше пробілів між цитатами, тоді скористайтеся цим підходом

a = "   "
>>> bool(a)
True
>>> bool(a.strip())
False

if not a.strip():
    print("String is empty")
else:
    print("String is not empty")

4
element = random.choice(myList)
if element:
    # element contains text
else:
    # element is empty ''

3

Як скласти if str(variable) == [contains text]:умову:

Мабуть, самий прямий спосіб:

if str(variable) != '':
  # ...

Зауважимо, що if not ...розв’язки перевіряють протилежну умову.


1

якщо змінна містить текст, тоді:

len(variable) != 0

цього не робить

len(variable) == 0



0
string = "TEST"
try:
  if str(string):
     print "good string"
except NameError:
     print "bad string"

4
Зазвичай хороша практика в StackOverflow коментувати розміщений код.
Король Мідас,

Хоча ця відповідь, ймовірно, правильна та корисна, бажано, якщо ви додасте до неї якесь пояснення, щоб пояснити, як це допомагає вирішити проблему. Це стає особливо корисним у майбутньому, якщо відбудеться зміна (можливо, не пов’язана), яка призведе до того, що вона перестане працювати, і користувачі повинні зрозуміти, як це колись працювало.
Ерті Сейдоль,

Вибачте, моя англійська мова - це так погано, але в майбутньому я не забуду коментувати свою публікацію.
Cornea Valentin
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.