回答此问题可获得 20 贡献值,回答如果被采纳可获得 50 分。
<p>我有一个包含两个字符串的元组的列表。<br/>
第一个是校验和,第二个是相应文件的名称。<br/>
有没有一种快速的方法来搜索重复的校验和并返回相应的文件名?你知道吗</p>
<p>例如:<br/></p>
<pre><code>[("sumstring1","abc.txt"),("sumstring2","def.txt"),("sumstring1","ghi.txt"),("sumstring2","jkl.txt")]
-->
[("abc.txt","ghi.txt"),("def.txt","jkl.txt")]
</code></pre>
<p>我试过制作两个不同的列表,一个是cheksums,另一个是filename。
然后我用<code>collections.Counter</code>找到重复的校验和。使用<code>list.index()</code>我从另一个列表中得到了它们的索引和相应的文件名,如下所示:</p>
<pre><code>csList=["sumstring1","sumstring2","sumstring1","sumstring2"]
fnList=["abc.txt","def.txt","ghi.txt","jkl.txt"]
indexList=[]
multiList=[(k,v) for k,v in collections.Counter(csList).items() if v>1]
</code></pre>
<p>(在这种情况下<code>multiList</code>将是<code>[("sumstring1",2),("sumstring2",2)]</code>)</p>
<pre><code>for elem in multiList:
temp=()
for i in range(elem[1]):
temp+=(csList.index(elem[0]),)
csList.remove(elem[0])
indexList.append(temp)
</code></pre>
<p>这给了我一个包含重复文件(<code>[(0,2),(1,3)]</code>)索引的列表,然后我可以用它来查找文件名。你知道吗</p>
<p>这很管用,但很难看。有没有更简单、更“python”的方法?你知道吗</p>