【问题标题】:How does one splice a list and create a new list with the spliced section?如何拼接一个列表并使用拼接部分创建一个新列表?
【发布时间】:2013-07-05 21:54:53
【问题描述】:

这是一个例子。

文件有一个字符串:4;4;4;8;4;4;4;9;9;4;4

我希望它输出:

4;4;4
8
4;4;4
9
9
4;4 

在此示例中,确定何时拼接的限制将是大于 4 的任何数字。我已尝试查看 python 库和此处的其他问题。我的猜测涉及以下内容:

listA = [] 
listB = []
for i in line:
    listA.append(i)

for item in listA:
    if int(item) > 4:
         listB.append(item)
    else:
         item = item

print(listA)
print(listB)

有没有更高效、更快捷的方法?我确信有,但我在 python 方面没有那么经验丰富,希望能得到帮助!

【问题讨论】:

  • 我将对文件中的数千行执行此操作,因此生成列表的循环也很棒!
  • 感谢 Martijn 的格式化。

标签: python list python-3.x


【解决方案1】:

使用itertools.groupby:

from itertools import groupby

for key, group in groupby(line.split(';'), key=lambda i: int(i) > 4):
    if key:
        for i in group:
            print(i)
    else:
        print(';'.join(group))

演示:

>>> for key, group in groupby(line.split(';'), key=lambda i: int(i) > 4):
...     if key:
...         for i in group:
...             print(i)
...     else:
...         print(';'.join(group))
... 
4;4;4
8
4;4;4
9
9
4;4

groupby 实用函数通过键对序列进行分组;这里的值是否大于 4;每次迭代都会给我们一个值序列,如果当前组中的值确实更大,我们将它们打印在单独的行上,否则它们会再次用分号连接成一个字符串。

【讨论】:

  • 当我使用示例line = 4;4;4;5;4;4 运行它时,它说有一个Type_error,其中'int' 对象不可迭代。当我对line = '4;4;4;5;4;4' 做同样的事情时,它说 int() base 10 的文字无效。我认为这是指“;”。让我知道你的想法。谢谢@Martijn Pieters
  • 另外......我对上述答案的真正含义有点困惑。非常感谢您的解释。
  • 请注意,这将保留 9;9,而 OP 的示例显示他们期望 9 是单独的组...
  • 如果9 是单独的组,我将不胜感激。
  • 为什么9s 是分开的,而不是最后两个4s?
猜你喜欢
  • 1970-01-01
  • 2021-12-16
  • 2020-09-03
  • 2014-07-19
  • 2013-01-28
  • 2015-09-24
  • 2020-12-29
  • 2011-08-30
  • 1970-01-01
相关资源
最近更新 更多