- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想重新格式化以下列表,其中包含具有整数(在某些元组之间共享)和字符串(每个元组具有特殊性)的元组
mylist = [(8, 'dddd'), (8, '33333'), (8, 'fdsss'), (9, 'fsfjs'),(10, 'dddd'), (10, '33333'), (12, 'fdsss'), (12, 'fsfjs')]
这样每个元组都包含一个整数和属于它的所有字符串的串联字符串,如下所示:
mynewlist = [(8, 'dddd, 33333, fdsss'), (9, 'fsfjs'),(10, 'dddd, 333333'), (12, 'fdsss, fsfjs')
经过深思熟虑,我想到的最简约的解决方案是简单地遍历所有元组并连接字符串,直到整数与下一个不匹配:
mynewlist = []
label = ''
for i in range(len(mylist)-1):
if mylist[i][0] != mylist[i+1][0]:
mynewlist.append(tuple([mylist[i][0], label + mylist[i][1]]))
label = ''
else:
label = label + mylist[i][1] + ','
这很好用。但是,我想知道是否有更有效/Pythonic 的方式来生成列表。我考虑过使用列表理解,但这不允许我在不遍历整个列表的情况下选择字符串;列表理解需要为每个唯一的整数运行,这看起来很浪费。我还考虑过通过索引预先选择与唯一整数关联的字符串,但这对我来说似乎很不符合 Pythonic。
非常感谢您的建议。谢谢!
最佳答案
你可以使用 itertools.groupby()
在这里进行分组:
from itertools import groupby
from operator import itemgetter
mynewlist = [
(key, ', '.join([s for num, s in group]))
for key, group in groupby(mylist, itemgetter(0))]
这使用 list comprehensions处理每个组并从分组的元组中提取字符串以进行连接。 operator.itemgetter()
object告诉 groupby()
对第一个元素的输入进行分组:
>>> from itertools import groupby
>>> from operator import itemgetter
>>> mylist = [(8, 'dddd'), (8, '33333'), (8, 'fdsss'), (9, 'fsfjs'),(10, 'dddd'), (10, '33333'), (12, 'fdsss'), (12, 'fsfjs')]
>>> [(key, ', '.join([s for num, s in group])) for key, group in groupby(mylist, itemgetter(0))]
[(8, 'dddd, 33333, fdsss'), (9, 'fsfjs'), (10, 'dddd, 33333'), (12, 'fdsss, fsfjs')]
请注意,groupby()
迭代器仅对连续 匹配元素进行分组。这意味着如果您的输入没有排序,那么具有相同初始元素的元组也不一定总是放在一起。如果您的输入未排序,并且您需要对所有具有相同起始元素的元组进行分组,而不管它们在输入序列中的什么位置,请首先使用字典对元素进行分组:
grouped = {}
for key, string in mylist:
grouped.setdefault(key, []).append(string)
mynewlist = [(key, ', '.join([s for num, s in group])) for key, group in grouped.items()]
关于 python 2.7 : efficiently reformat list of tuples,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35398671/
考虑以下声明: int a[M][N]; // M and N are known compile-time 像声明的那样对待它是否合法: int a[N][M]; 甚至: int a[A][B];
题目地址:https://leetcode-cn.com/contest/weekly-contest-185/problems/reformat-the-string/ 题目描述 给你一个混合了
我想在保存文件时自动重新格式化文件中的代码。可以在 PyCharm 中实现吗?到目前为止,这是我在 PyCharm 中找不到的 Eclipse 的唯一功能。 如果可以的话,请指点一下设置。我已经浏览了
我使用了“重新格式化代码”选项,但它拒绝将代码格式化为我的自定义设置。我已经更改了新模板中的“代码样式”设置,并且正在使用它。无法在全局级别上更改代码样式。 它继续像这样格式化我的代码: if (x)
我想跟踪我的镜头并将 CG 元素添加到它作为我的核弹项目的一部分。为此,我对素材进行了无失真处理并将其写入磁盘以加快处理速度。然而,当我试图重新扭曲书面镜头时(如附图所示),它没有给我原始镜头。我发现
我对默认启用此功能的 PHPStorm 很生气。我必须取消这个每次我犯下的错误。如果我忘记了,它会默默地进行行截断和其他我不喜欢的事情。有没有办法将此复选框设置为默认取消选中? 最佳答案 对不起,我错
当我按下 cmd + alt + l 时,Webstorm 会重新格式化以美化我的 JavaScript 源代码。如何使 Webstorm 自动将我的源代码中的双引号更改为单引号? 最佳答案 在 We
当我在 this commit 上运行 GitLab CI 时 用这个gitlab-ci.yml: stages: - format - test black_formatting:
所以我有一个这样的表格布局: XML 所以问题是,它在第一次启动时看起来不错,但在更改文本后它看起来很难看并且完全调整了大小。我尝试使用 percnet 作为宽度,但失败了。那么如何让它在更改文本
我想重新格式化以下列表,其中包含具有整数(在某些元组之间共享)和字符串(每个元组具有特殊性)的元组 mylist = [(8, 'dddd'), (8, '33333'), (8, 'fdsss'),
这是我在这个页面上的第一个问题,因为我没有找到有这个错误的人,我希望我能在这个问题上解释一下自己。 嗯,WebGl 纹理有问题,我得到下一个错误:错误:WebGL:texImage2D:转换需要重新格
我的笔记本电脑已经格式化并安装了新的操作系统,从那以后我得到这个错误:ImportError: 没有名为 git 的模块 这是指简单导入 git 的 python 代码。 我的笔记本格式化前git的位
这是对 WinForms RichTextBox: how to perform a formatting on TextChanged? 我有一个带有 RichTextBox 的 Winforms
我有一个使用 HashMap 的类,我已经导入了导入 java.util.HashMap。 在执行重新格式化代码时 -> 使用 Cntrl+Shift+R 的 eclipse 快捷方式 它重新格式化并
我知道用于删除未使用的导入的 Ctrl+Shift+O 快捷键,但可以在 android studio 中重新格式化代码时删除未使用的导入。 编辑 1: 我在寻找什么:重新格式化代码时删除未使用的导入
在 Eclipse 中,(Window -> Preferences -> Java -> Code Style -> Formatter)有一个工具可以创建我自己的格式样式并将其应用到代码中。有没有
我喜欢 IntelliJ IDEA 的“重新格式化代码...”(Ctrl+Alt+L)功能。 现在我有很多 XML 文件要查看。我现在做的是,我打开一个xml文件,全选,复制粘贴到IntelliJ I
如何重新格式化此 block 以便在“名称”字段上添加排序? Router.route('/hospitals/search/:searchString') .get(functio
我在 Ubuntu 18.04 上使用 JetBrains Rider 版本 2018.3.3。 我已启用设置 Editor -> General -> Ensure line feed at fil
因此,我按下了Do not show this dialog in the future(截取自网络的屏幕截图)。 已经有一段时间了,现在我想更改默认的重新格式化行为。 我似乎找不到再次显示此对话框的
我是一名优秀的程序员,十分优秀!