<p>如果排序不重要,您可以使用一种稍微改变的<a href="https://stackoverflow.com/a/14107790">this</a>解决方案—将内部列表转换为<code>set</code>的第一个和最后一个转换回:</p>
<pre><code>s = pd.Series([[72197, 82086], [72197, 82086, 194665], [72230], [72235, 72690, 121261], [72235, 121261],
[72241], [72251], [72253, 83613], [72253, 83613], [72253, 83613, 101294], [72255, 122794],
[71962, 101646, 101663, 126351], [71962, 101646, 101663, 126351, 141883],
[71962, 101646, 101663, 141883], [72235]])
</code></pre>
<p>你知道吗</p>
<pre><code>import functools,operator,collections
def is_power_of_two(n):
"""Returns True iff n is a power of two. Assumes n > 0."""
return (n & (n - 1)) == 0
</code></pre>
<hr/>
<pre><code>def eliminate_subsets(sequence_of_sets):
"""Return a list of the elements of `sequence_of_sets`, removing all
elements that are subsets of other elements. Assumes that each
element is a set or frozenset and that no element is repeated."""
# The code below does not handle the case of a sequence containing
# only the empty set, so let's just handle all easy cases now.
if len(sequence_of_sets) <= 1:
return list(sequence_of_sets)
# We need an indexable sequence so that we can use a bitmap to
# represent each set.
if not isinstance(sequence_of_sets, collections.Sequence):
sequence_of_sets = list(sequence_of_sets)
# For each element, construct the list of all sets containing that
# element.
sets_containing_element = {}
for i, s in enumerate(sequence_of_sets):
for element in s:
try:
sets_containing_element[element] |= 1 << i
except KeyError:
sets_containing_element[element] = 1 << i
# For each set, if the intersection of all of the lists in which it is
# contained has length != 1, this set can be eliminated.
out = [s for s in sequence_of_sets
if s and is_power_of_two(functools.reduce(
operator.and_, (sets_containing_element[x] for x in s)))]
return list(map(list, out))
</code></pre>
<hr/>
<pre><code>s = pd.Series(eliminate_subsets(list(map(set, s))))
print (s)
0 [194665, 72197, 82086]
1 [72230]
2 [72690, 72235, 121261]
3 [72241]
4 [72251]
5 [101294, 72253, 83613]
6 [122794, 72255]
7 [101646, 126351, 71962, 141883, 101663]
dtype: object
</code></pre>