如何单独定位两个列表中的特定元素?如何在列表中多次选择任意数量的元素?

时间:2016-04-24 11:31:27

标签: python algorithm data-structures

我有两个变量,每个变量都有一个字符串:

a = 'YBBB'
b = 'RYBB'
x = []

我想循环遍历每个字符串并对待每个字符串&#39; B&#39;在两个列表中作为一个独立的元素(希望我可以输入一个。(&#39; B&#39;)和b。(&#39; B&#39;)。我真正想做的是循环< strong> b 并询问 b 中的每个项目是否都在 a 。如果是, b (例如&#39; B&#39;)在 a 中检查。这应该给3.然后我想比较两个列表中项目的长度并推动两者中的较小者进入空列表。在这种情况下,只有两个B将被推入 x

2 个答案:

答案 0 :(得分:1)

您可以使用嵌套列表理解,如下所示:

>>> [i for i in set(b) for _ in range(min(b.count(i), a.count(i)))]
['B', 'B', 'Y']

如果订单很重要,您可以使用collections.OrderedDict创建b中的唯一商品:

>>> from collections import OrderedDict
>>> 
>>> [i for i in OrderedDict.fromkeys(b) for _ in range(min(b.count(i), a.count(i)))]
['Y', 'B', 'B']

答案 1 :(得分:-1)

这是版主的无用文字。

import collections

a = 'YBBB'
b = 'RYBB'
x = []

a_counter = collections.Counter(a)
b_counter = collections.Counter(b)
print(a_counter)
print(b_counter)

for ch in b:
    if a_counter[ch]:
        x.append(min(a_counter[ch], b_counter[ch]) * ch)

print(x)

--output:--
Counter({'B': 3, 'Y': 1})
Counter({'B': 2, 'Y': 1, 'R': 1})
['Y', 'BB', 'BB']

或者,如果您只想逐步浏览b中的每个唯一元素:

for ch in set(b):
    if a_counter[ch]:
        x.append(min(a_counter[ch], b_counter[ch]) * ch)

print(x)

--output:--
['Y', 'BB']