Проверить, находятся ли буквы одной строки в другой строке

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

Я не хочу дважды проверять, находится ли буква в другой строке, поэтому, если я уже проверил эту букву, я хочу перейти к следующей букве.

На данный момент у меня есть такой код:

str1, str2 = list(input()), list(input()) 

if len(str1) > len(str2):
    str = str1
else: 
    str = str2

for x in str:
    c = 0
    if x in str2:
        c += 1
if c != 0:
    print("Both have the same letters!") 
else: 
    print("Nope there are some letters missing..")

Я не знаю, следует ли мне работать со списками вместо использования счетчика ... пожалуйста, подробное объяснение решения или какое-либо руководство по качеству было бы очень признательно! <3

На данный момент ваша логика не проверяет наличие всех букв. Например - str1 = 'foo', str2='fbar'. Результатом будет У обоих одинаковые буквы!. Один из подходов - сохранить буквы обеих строк в двух разных наборах и проверить, равны ли наборы.

Mahesh 17.12.2018 23:54
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
4
1
4 135
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

Некоторые проблемы с кодом заключаются в том, что str2 всегда используется для сравнения, даже если str2 длиннее str1.

for x in str:
    c = 0
    if x in str2:

Затем c устанавливается в 0 для каждого символа в str. Вместо этого у вас может быть счетчик для подсчета количества символов, которых нет в другой строке.

Это должно сработать

str1, str2 = list(input()), list(input()) 

if len(str1) > len(str2):
    str = str1
    compared_string = str2
else: 
    str = str2
    compared_string = str1

not_in_other_string = 0
for x in str:
    if x  not in compared_string:
        not_in_other_string += 1
if not_in_other_string == 0:
    print("Both have the same letters!") 
else: 
    print("Nope there are some letters missing..")

Похоже, вы хотите узнать, все ли символы в одной строке находятся в какой-то более крупной строке.

Вы можете использовать unique = ''.join(set(substring)), чтобы получить список символов в подстроке, а затем создать list comprehension, чтобы получить все символы в большей строке.

Вот мой пример:

unique = ''.join(set(substring))
not_in = [char for char in unique if char not in superstring]

Теперь вы можете проверить not_in, чтобы убедиться, что он равен нулю, иначе в подстроке был символ, которого не было в суперстроке.

Например:

superstring = "hello"
substring = "xllo"

unique = ''.join(set(substring))
not_in = [char for char in unique if char not in superstring]

print not_in
>>>['x']

print not_in == []
>>>False

Как правило, предпочтительный способ делать что-то в python - использовать понимание списков или использовать некоторую встроенную функцию, которая уже проверяет строки для вас, а не стиль C, в котором вы проходите цикл и явно проверяете букву на букву. Это идиоматический способ питонического программирования.

Разбивая понимание списка, мы получаем такой цикл:

   for char in unique: 
        if char not in superstring:
             char #char meets conditions so it is the value used in [char ... 

Вот модификация, которую я бы сделал

str1, str2 = input(), input()

unique = ''.join(set(str1))
not_in = [char for char in unique if char not in str2]

if not_in == []:
    print("Both have the same letters!") 
else: 
    print("Nope there are some letters missing..")
Ответ принят как подходящий

Преобразование строк в наборы отдельных символов удаляет повторяющиеся символы, поэтому мы можем просто сравнить их:

if set(str1) == set(str2):
    print("Both have the same letters!") 
else:
    print("Nope there are some letters missing..")

Примечание:

Как порядок элементов в наборах не важен, мы можем даже Сравните их, т.е. г.

if set(str1) <= set(str2):        # <= means "is subset" in this context
    print("All symbols in str1 are in str2, too.")

или

if set(str1) < set(str2):        # < means "is a proper subset" in this context
    print("All symbols in str1 are in str2, too, "
          "but str2 has at least 1 symbol not contained in str1.")

Это было прекрасно! Большое спасибо! Если я хорошо понял метод set (), что он делает - это словарь? Извините, если вопрос дукмб, но я пытаюсь научиться шаг за шагом. Я очень ценю помощь всех!

Jesus A. Garrido Cordero 18.12.2018 11:32

Нет, set()не делает словарь, он создает набор, который сам является особый вид сбора, соответствующим определению математический для набор. Например: set("abcacab") будет {"a", "b", "c"} (или {"c", "a", "b"}, что то же самое - порядок элементов не имеет значения). (Примером словаря может быть {1: "a", 2: "b", 3: "c"} - он заключен в та же пара фигурных скобок ({}), но состоит из пар key: value, разделенных двоеточием (:).)

MarianD 18.12.2018 15:54

Хорошо, теперь я полностью понимаю разницу, спасибо большое! Вы отличный человек, научив меня этому, ничего не спрашивая!

Jesus A. Garrido Cordero 18.12.2018 18:40
str1, str2 = input().split()

if len(str1) > len(str2):
    string_to_check= str1
    string_from_which_to_check = str2
else: 
    string_to_check = str2

string_from_which_to_check = str1    
not_in_other_string  = set(string_to_check) - set(string_from_which_to_check)
if len(not_in_other_string )==0:
     print("character are present in string")
else:
    print("{} not present in string".format(str(not_in_other_string )))

Другие вопросы по теме