回答此问题可获得 20 贡献值,回答如果被采纳可获得 50 分。
<p>第一次海报在这里。如果我有一个包含具有不同信息的子列表的列表,并且我想将具有相同键值的所有子列表分组到一个新的子列表中(例如,根据键值将列表唯一化),那么最有效的方法是什么?在</p>
<p>示例:</p>
<pre><code>A = [[1,2,3], [1,3,7], [2,1,3], [8,9,6], [3,7,9], [2,3,8], [1,2,4]]
</code></pre>
<p>我想将“0”索引中具有相同项的所有子列表分组到一个新的子列表中,最好保持原来的顺序:</p>
^{pr2}$
<p>这个问题我已经解决过很多次了,但是我想看看有没有更有效的方法来解决这个问题。是的,出于这个原因,我可以使用numpy包,但是我对list解决方案感兴趣。在</p>
<p>通常,我会首先唯一化每个子列表中第一个索引中的项(如果不担心效率或顺序,则使用set方法),然后循环整个列表,将子列表组合成一个新的子列表:</p>
<pre><code>def getUniqueList(list):
seen = []
for e in list:
if e not in seen:
seen.append(e)
return seen
def uniquify(list):
# Get all items from the first column
new_list = [item[0] for item in list]
return getUniqueList(new_list)
def rearrangeList(A, A_0):
B = []
for i in range(len(A_0)):
B.append([])
for i in range(len(A)):
index = A_0.index(A[i][0])
B[index].append(A[i])
return B
A = [[1,2,3], [1,3,7], [2,1,3], [8,9,6], [3,7,9], [2,3,8], [1,2,4]]
A_0 = uniquify(A) # Contains all unique keys in index 0 of list A
B = rearrangeList(A, A_0)
print(B)
</code></pre>
<p>这个<em>应该</em>(我没有测试这个,但是我将如何编码它)结果是:</p>
<blockquote>
<p>B = [ [[1,2,3], [1,3,7], [1,2,4]], [[2,1,3],[2,3,8]], [[8,9,6]], [[3,7,9]] ]</p>
</blockquote>
<p>我想知道,1)在效率方面,是否有更好的方法来实现这一点,2)是否有一种方法可以以更少的步骤完成这项工作(不一定高效,只是好奇)。希望这个问题提出得很好,但如果需要编辑请告诉我!在</p>