<h2><code>nx.connected_components</code></h2>
<p>您可以使用<code>networkx</code>来实现这一点。生成一个图,并使用<a href="https://networkx.github.io/documentation/networkx-1.10/reference/generated/networkx.DiGraph.add_edges_from.html" rel="nofollow noreferrer">^{<cd3>}</a>添加列表作为图的边。然后使用<a href="https://networkx.github.io/documentation/networkx-1.10/reference/generated/networkx.algorithms.components.connected.connected_components.html" rel="nofollow noreferrer">^{<cd4>}</a>,它将精确地为您提供图中连接组件的集合列表:</p>
<pre><code>import networkx as nx
L = [['John','Sayyed'], ['John' , 'Simon'] ,['bush','trump']
G=nx.Graph()
G.add_edges_from(L)
list(nx.connected_components(G))
[{'John', 'Sayyed', 'Simon'}, {'bush', 'trump'}]
</code></pre>
<hr/>
<p><b>包含多个项目的子列表</b></p>
<p>如果子列表包含多于<code>2</code>元素,则可以从每个子列表中获取所有长度<code>2</code><a href="https://docs.python.org/2/library/itertools.html#itertools.combinations" rel="nofollow noreferrer">^{<cd7>}</a>,并将其用作网络边缘:</p>
^{pr2}$
<p>我们还可以用<a href="https://networkx.github.io/documentation/networkx-1.10/reference/generated/networkx.drawing.nx_pylab.draw.html" rel="nofollow noreferrer">^{<cd8>}</a>将这些连接的组件形象化:</p>
<pre><code>pos = nx.spring_layout(G, scale=20)
nx.draw(G, pos, node_color='lightblue', node_size=500, with_labels=True)
</code></pre>
<p><br/>
<a href="https://i.stack.imgur.com/Of9oW.png" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/Of9oW.png" alt="enter image description here"/></a></p>
<hr/>
<p><b>详细信息</b></p>
<p>关于<a href="https://en.wikipedia.org/wiki/Connected_component_(graph_theory)" rel="nofollow noreferrer">connected components</a>的更详细说明:</p>
<blockquote>
<p>In graph theory, a connected component (or just component) of an undirected graph is a subgraph in which any two vertices are connected to each other by paths, and which is connected to no additional vertices in the supergraph</p>
</blockquote>
<p>因此,本质上,这段代码创建了一个图,其中每个边由两个值组成<code>u,v</code>,其中<code>u</code>和{<cd11>}将由这条边连接起来。在</p>
<p>因此,子列表与至少一个子列表和一个公共元素的合并可以转化为图论问题,因为所有节点都可以通过现有路径到达。在</p>