Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Python中匹配两个字母列表_Python - Fatal编程技术网

在Python中匹配两个字母列表

在Python中匹配两个字母列表,python,Python,在Python中,如何匹配两个字母列表而不考虑字母在该列表中的出现顺序 例如:我想我的第一个列表是['a','b','c','d'],我想把这个列表与另一个列表['b','c','a','d']匹配,然后得到一个输出为真。如何做到这一点?我是python新手,需要您的帮助 提前感谢怎么样: # if you don't want to consider duplicates either output = set(your_first_list) == set(your_second_list)

在Python中,如何匹配两个字母列表而不考虑字母在该列表中的出现顺序

例如:我想我的第一个列表是
['a','b','c','d']
,我想把这个列表与另一个列表
['b','c','a','d']
匹配,然后得到一个输出为真。如何做到这一点?我是python新手,需要您的帮助

提前感谢

怎么样:

# if you don't want to consider duplicates either
output = set(your_first_list) == set(your_second_list)

# if duplicates matter
output = sorted(your_first_list) == sorted(your_second_list)
那么:

# if you don't want to consider duplicates either
output = set(your_first_list) == set(your_second_list)

# if duplicates matter
output = sorted(your_first_list) == sorted(your_second_list)
您可以对它们进行排序:

In [1]: a = list('abcd')
In [2]: b = list('bcad')
In [3]: sorted(a) == sorted(b)
Out[3]: True

In [4]: a == b
Out[4]: False
您可以对它们进行排序:

In [1]: a = list('abcd')
In [2]: b = list('bcad')
In [3]: sorted(a) == sorted(b)
Out[3]: True

In [4]: a == b
Out[4]: False

我有不同的想法,就是这样:

all(x in a for x in b) and all(x in b for x in a)
这将检查
a
中的所有字母是否出现在
b
中,以及
b
中的所有字母是否出现在
a
中。这意味着,如果设置了
a
b
,则它们“匹配”

但是由于已经有了一个很好的答案,我决定做一个速度比较,结果证明我的解决方案比Daren和Lev基于
sorted()
建议的解决方案要快得多。对于长度小于100个字符的字符串,它的性能也优于Daren的
set(a)==set(b)

结果:

字符串长度:5
排序和匹配:0.04
设置和匹配:0.03
双向检查:0.02

字符串长度:20
排序和匹配:0.11
设置和匹配:0.06
双向检查:0.02

字符串长度:100
排序和匹配:0.53
设置和匹配:0.16
双向检查:0.25

字符串长度:1000
排序和匹配:6.86
设置和匹配:0.89
双向检查:3.82

字符串长度:5000
排序和匹配:36.67
设置和匹配:4.28
双向检查:19.49


我有不同的想法,就是这样:

all(x in a for x in b) and all(x in b for x in a)
这将检查
a
中的所有字母是否出现在
b
中,以及
b
中的所有字母是否出现在
a
中。这意味着,如果设置了
a
b
,则它们“匹配”

但是由于已经有了一个很好的答案,我决定做一个速度比较,结果证明我的解决方案比Daren和Lev基于
sorted()
建议的解决方案要快得多。对于长度小于100个字符的字符串,它的性能也优于Daren的
set(a)==set(b)

结果:

字符串长度:5
排序和匹配:0.04
设置和匹配:0.03
双向检查:0.02

字符串长度:20
排序和匹配:0.11
设置和匹配:0.06
双向检查:0.02

字符串长度:100
排序和匹配:0.53
设置和匹配:0.16
双向检查:0.25

字符串长度:1000
排序和匹配:6.86
设置和匹配:0.89
双向检查:3.82

字符串长度:5000
排序和匹配:36.67
设置和匹配:4.28
双向检查:19.49


但我不知道我为什么要费心,有人会帮你工作以获得代表分数。@MarkReed你可以自由地对答案、问题进行否决投票,并投票结束问题。即使你回答这样的问题得不到代表分数,人们仍然会回答。是的,我知道像这样的问题是“容易获得的代表”,有些好的答案没有得到应有的关注,这是一个很小的问题,但这就是stackoverflow的工作原理。看看我的第二个得票最多的答案。15票用于发现打字错误;而我的一些答案花了将近半个小时才写完,只得到了1到2张赞成票。悲伤,但却是真的…@BigYellowCactus:非常真实。不知何故,苏讨厌RTFM问题,但对RTFM答案充满热情,尽管后者同样糟糕。但我不知道我为什么要费心,有人会帮你工作以获得代表分数。@MarkReed你可以自由地对答案、问题进行否决投票,并投票结束问题。即使你回答这样的问题得不到代表分数,人们仍然会回答。是的,我知道像这样的问题是“容易获得的代表”,有些好的答案没有得到应有的关注,这是一个很小的问题,但这就是stackoverflow的工作原理。看看我的第二个得票最多的答案。15票用于发现打字错误;而我的一些答案花了将近半个小时才写完,只得到了1到2张赞成票。悲伤,但却是真的…@BigYellowCactus:非常真实。不知何故,苏讨厌RTFM问题,但却热衷于RTFM答案,尽管后者同样糟糕。+1,这种方法更灵活,因为
a=list('aabcd')
b=list('abcd')
不匹配。+1,这种方法更灵活,从某种意义上说
a=list('aabcd')
b=list('abcd'))
不匹配。@Lev:不,我想不匹配。不过,在OP的例子中,它确实起作用,如果a和b是集合,它通常起作用,然后它仍然比Daren的短字符串集合解决方案快。因此,这主要表明排序和创建集合会带来一些开销,考虑您是否真的需要它是有用的。+1,非常有趣。谢谢你在这件事上付出了额外的努力@列夫:不,我想不会。不过,在OP的例子中,它确实起作用,如果a和b是集合,它通常起作用,然后它仍然比Daren的短字符串集合解决方案快。因此,这主要表明排序和创建集合会带来一些开销,考虑您是否真的需要它是有用的。+1,非常有趣。谢谢你在这件事上付出了额外的努力!