<p>OP示例中的预期结果是<code>[li1,li5]</code>和<code>[li2,li4]</code>。优选地,解决方案还应捕获一个列表捕获所有元素的示例,或仅三个列表捕获所有元素的示例</p>
<pre><code>import numpy as np
import pandas as pd
import itertools as it
R = [0,3,10,15]
li1 = [0,3]
li2 = [0,10]
li3 = [3,10]
li4 = [3,15]
li5 = [10,15]
</code></pre>
<p>使用列名创建初始空数据帧,并使用值R创建索引</p>
<pre><code>dat = pd.DataFrame(columns=['li1','li2','li3','li4','li5'], index=R)
</code></pre>
<p>对于数据帧中的每个列表,我们将指示索引是否存在(即R)。我们使用enumerate将每个列表放入数据帧中</p>
<pre><code>for i,j in list(enumerate([li1,li2,li3,li4,li5])):
dat.iloc[:,i] = dat.index.isin(j)*1
</code></pre>
<p>为了研究哪些列的组合包含所有元素,我们可以使用Itertools查找所有2个成对的组合,并检查所有元素是否都大于零</p>
<pre><code>A = list(it.combinations(['li1', 'li2', 'li3', 'li4', 'li5'], 2))
for i in np.arange(0,len(A)):
ens = dat[list(A[i])].apply(sum, 1)
if all(i > 0 for i in ens): print('A combination that contains all elements:', list(A[i]))
</code></pre>
<p><strong>结果:</strong></p>
<pre><code>A combination that contains all elements: ['li1', 'li5']
A combination that contains all elements: ['li2', 'li4']
</code></pre>
<p>为了研究最少数量的列表,可以从一个列表开始,将<code>it.combinations</code>放在1,然后逐步研究两个、三个或更多列表的组合</p>