Як перевірити, порожня 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.