python - 整数列表中的对元组
问题描述
我正在尝试从整数列表中创建一个元组对列表。元组对列表将包含在列表中找到的数字对。下面的例子:
listofint = [4, 3, 1, 2, 3, 1, 1, 3, 5, 1, 2, 2]
listoftuplepairs = [(3,3),(1,1),(2,2),(1,1)]
我很困惑如何使用列表理解来实现这一点。我在下面尝试过,但它只返回一个空字符串。
listoftuplepairs = [(i,listofint.remove(i)) for i in listofint if listofint.remove(i) == i]
我了解remove()
在列表中使用不会返回任何内容。我已经尝试过,pop()
但我只能将列表索引作为参数传递给它,而不是我想要pop()
并存储在我的元组列表中的实际值。
有没有其他方法可以通过列表理解来做到这一点?
解决方案
你可以试试这个Counter
Counter
用于统计可散列对象的出现次数。
from collections import Counter
l=[4, 3, 1, 2, 3, 1, 1, 3, 5, 1, 2, 2]
c=Counter(l)
# Counter({4: 1, 3: 3, 1: 4, 2: 3, 5: 1})
[(k,k) for k,v in c.items() for _ in range(v//2)]
# [(3, 3), (1, 1), (1, 1), (2, 2)]
因此,这里的键k
是数字,值v
是它在列表中出现的次数。既然你想让对得到我做的对数v//2
。单行列表理解中的上述方法是
[(k,k) for k,v in Counter(l).items() for _ in range(v//2)]
使用dict.fromkeys
. 只是模仿Counter
这里的做法。
c=dict.fromkeys(l,0)
for k in l:
c[k]+=1
[(k,k) for k,v in c.items() for _ in range(v//2)]
推荐阅读
- arrays - 域或主机名的正则表达式模式,或者可能是匹配模式的最佳方式
- c++ - 为什么我的 C++ 代码中出现错误“预期类型名称”错误?
- python - 使用 BS4 抓取 Domino 的促销页面
- python - BeautifulSoup - 从标签中获取文本,即使它有其他标签
- java - 有没有办法在java中使用filewriter打开不同的文本文件
- php - 无法将 DB2 与 PHP 连接
- amazon-web-services - 如果 EMR 中的总集群资源内存小于从 AWS S3 读取的数据集,Spark 如何读取和处理 AWS EMR 中的数据
- javascript - 在触发更新时选择选择重复
- ionic-framework - Remove (or replace) role="contentinfo" from
on Ionic 4 - c++ - 在直播中解码 MJPEG 图像