Python 我无法循环浏览完整的l2列表

Python 我无法循环浏览完整的l2列表,python,python-3.x,list,Python,Python 3.x,List,我试图创建一个函数来解决以下问题:完成函数扰码(str1,str2),如果str1字符的一部分可以重新排列以匹配str2,则返回true,否则返回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)

我试图创建一个函数来解决以下问题:完成函数扰码(str1,str2),如果str1字符的一部分可以重新排列以匹配str2,则返回true,否则返回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列表中循环。
请帮助。

嘿,当你从列表中删除时,使用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]

您可以简单地使用
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

return l3
之后的代码永远不会运行。另外,我认为这个算法不能满足要求。您给出的代码似乎是错误的,因为在返回l3之后将不会运行任何东西,而在运行l2之后将是=[9,3],它将是剩下的。除非你想删除它自己的号码。当它出现时。据我所知,你只想删除一次。