Я не могу просмотреть весь список l2 - PullRequest
0 голосов
/ 21 января 2019

Я пытаюсь создать функцию для решения следующей проблемы: Завершение функции scramble (str1, str2), которая возвращает значение true, если часть символов str1 можно переставить в соответствии с str2, в противном случае возвращает значение false.

def scramble(s1, s2):
    l1 = list(s1)
    l2 = list(s2)
    l3 = l2
    for i in l2:
        for j in l1:
            if i == j:
                l1.remove(j)
                l3.remove(i)
                break

    if l3 == []:
        return True
    else:
        return False

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

Ответы [ 2 ]

0 голосов
/ 21 января 2019

Вы можете просто использовать all, чтобы найти, что если все элементы s1 находятся в s2, например:

def scramble(s1, s2):
    return all([i in s2 for i in s1])

некоторые примеры:

In [26]: scramble([],[])
Out[26]: True

In [27]: scramble([1],[])
Out[27]: False

In [28]: scramble([1],[1])
Out[28]: True

In [29]: scramble([1],[1,2])
Out[29]: True

In [30]: scramble([1,2],[1,2])
Out[30]: True

In [31]: scramble([1,2,3],[1,2])
Out[31]: False

In [32]: scramble([1,2,3],[3,1,2])
Out[32]: True
0 голосов
/ 21 января 2019

Эй, когда вы удаляете из списка, гораздо проще использовать delete. нет необходимости в l3, вы проверяете, содержит ли список номер затем найти индекс, затем удалить. вы возвращаете не l2, потому что если l2 пуст, он вернет false. Вот почему с использованием не

Надеюсь, это поможет!

l1 = [1,2,4,5,3]
l2 = [3,4,9,5,3]


for number in l1:
    if l2.__contains__(number):
        index = l2.index(number)
        del l2[index]

return not l2

чтобы удалить каждое значение все время, пока оно не появится, просто сделайте это с помощью set sub следующим образом: set удалит повторяющиеся значения. и с помощью списка (s1-s2) вы удалите показанные значения:

l1 = [1, 2, 3, 1, 2, 5, 6, 7, 8]
l1
[1, 2, 3, 1, 2, 5, 6, 7, 8]
list(set(l1))
[1, 2, 3, 5, 6, 7, 8]
l2 = [1, 2, 3]
list(set(l1) - set(l2))
[8, 5, 6, 7]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...