我想计算一个元组在我的输出"result"中出现了多少次(我改进了以前的问题,如何在python中将许多"列出的"元组连接成一个元组?)。

所以我这样做了:

from collections import Counter
liste = [1,2,3,5,10]
liste2 = [[1,2,3,5,10], [1,2], [1,5,10], [3,5,10], [1,2,5,10]]
for elt in liste2:
syn = elt # identify each sublist of liste2 as syn
nTuple = len(syn)   # number of elements in the syn
for i in liste:
myTuple = ()
if syn.count(i): # check if an item of liste is in liste2
myTuple = (i, nTuple)
if len(myTuple) == '0': # remove the empty tuples
del(myTuple)
else:
result = [myTuple]
c = Counter(result)
for item in c.items():
print(item)
我得到了这些结果:
((1, 5), 1)
((2, 5), 1)
((3, 5), 1)
((5, 5), 1)
((10, 5), 1)
((1, 2), 1)
((2, 2), 1)
((1, 3), 1)
((5, 3), 1)
((10, 3), 1)
((3, 3), 1)
((5, 3), 1)
((10, 3), 1)
((1, 4), 1)
((2, 4), 1)
((5, 4), 1)
((10, 4), 1)
号
我希望有一个元组(key,value),其中value=key在'result'中出现的次数,而不是有一些elt n次(例如((5,3),1)和((10,3),1)出现两次。
我想得到这样的结果:
((1, 5), 1)
((2, 5), 1)
((3, 5), 1)
((5, 5), 1)
((10, 5), 1)
((1, 2), 1)
((2, 2), 1)
((1, 3), 1)
((5, 3), 2)
((10, 3), 2)
((3, 3), 1)
((1, 4), 1)
((2, 4), 1)
((5, 4), 1)
((10, 4), 1)
号
谢谢
这就是Counter应该已经做的,所以它们实际上是整数的元组还是其他什么?
什么是synset?
对不起,这是个错误。请读"syn"
如果syn.count是查看列表中是否有内容的糟糕方法,那么len(myTuple)永远不会等于字符串。
我相信问题就在网上:
c = Counter(result)
每次迭代,您都在创建一个新的计数器,如果您在开始时实例化一个计数器,然后在事实之后输出它的元素,我希望您能够得到所需的输出:
from collections import Counter
liste = [1,2,3,5,10]
liste2 = [[1,2,3,5,10], [1,2], [1,5,10], [3,5,10], [1,2,5,10]]
c = Counter()
for elt in liste2:
syn = elt # identify each sublist of liste2 as syn
nTuple = len(syn)   # number of elements in the syn
for i in liste:
myTuple = ()
if syn.count(i): # check if an item of liste is in liste2
myTuple = (i, nTuple)
if len(myTuple) == 0: # remove the empty tuples
del(myTuple)
else:
result = myTuple
c[result] += 1
for item in c.items():
print(item)
号
另一个需要改变的是你把东西放在柜台的什么地方,以及你放在柜台里的东西。见上述代码。
已编辑解决方案以回答您的问题。
编辑,最初甚至没有注意到if语句中的错误。如果len(mytuple)==0实际上是多余的,因为不会在此创建空的tuple。您的示例中有几个多余的行。以下代码的作用完全相同:
from collections import Counter
liste = [1,2,3,5,10]
liste2 = [[1,2,3,5,10], [1,2], [1,5,10], [3,5,10], [1,2,5,10]]
c = Counter()
for elt in liste2:
nTuple = len(elt)   # number of elements in the syn
for i in liste:
if elt.count(i):
myTuple = (i, nTuple)
c[myTuple] += 1
for item in c.items():
print(item)
正如我在我的评论中所说,您可以通过将其封装在函数中使其干净地运行:
>>> from collections import Counter
... liste = [1,2,3,5,10]
... liste2 = [[1,2,3,5,10], [1,2], [1,5,10], [3,5,10], [1,2,5,10]]
... def get_syncounts(liste, liste2):
...     c = Counter()
...     for elt in liste2:
...         nTuple = len(elt)   # number of elements in the syn
...         for i in liste:
...             if elt.count(i):
...                    myTuple = (i, nTuple)
...                    c[myTuple] += 1
...     for item in c.items():
...         print(item)
>>> get_syncounts(liste, liste2)
((1, 2), 1)
((10, 5), 1)
((1, 3), 1)
((5, 5), 1)
((5, 4), 1)
((1, 4), 1)
((1, 5), 1)
((10, 4), 1)
((2, 2), 1)
((3, 3), 1)
((2, 5), 1)
((5, 3), 2)
((10, 3), 2)
((2, 4), 1)
((3, 5), 1)
>>> get_syncounts(liste, liste2)
((1, 2), 1)
((10, 5), 1)
((1, 3), 1)
((5, 5), 1)
((5, 4), 1)
((1, 4), 1)
((1, 5), 1)
((10, 4), 1)
((2, 2), 1)
((3, 3), 1)
((2, 5), 1)
((5, 3), 2)
((10, 3), 2)
((2, 4), 1)
((3, 5), 1)
>>>
。
格拉齐·米勒!这正是我要找的。你救了我一天。
非常欢迎。接受我的回答表示感谢:d
然后可以将整个内容封装到一个函数中,这样每次您想要运行它时,计数都是新的。
我在上面添加了一些关于跑步的评论。我想避免每次运行程序时该值都会增加
放弃您的编辑,并添加了您应该如何将其放入函数中,并向您的心脏内容重复。
您可以在列表中每次追加结果,在追加到列表之前,您可以检查元素是否存在于列表中。这样可以避免重复。
store_results = []
if result not in store_result:
store_result.append(result)
然后列表很容易转换成元组
print tuple(store_results)
。