【问题标题】:Split a list before a slash appears in an element for Python在 Python 的元素中出现斜杠之前拆分列表
【发布时间】:2021-11-21 20:20:00
【问题描述】:

我有一个清单

list = ['09/30', '16:30','A','B','5','100','10/01','16:30','C','D','4',
'10/02','16:30','E','F']

我希望每次在带有 / 的元素之前将其拆分为一个新列表。

希望有这样的东西:

list = ['09/30', '16:30','A','B','5','100'], ['10/01','16:30','C','D','4'], ['10/02','16:30','E','F']

然后我想用 NA 填写较短的列表

list = [['09/30', '16:30','A','B','5','100'], ['10/01','16:30','C','D','4', 'NA'], ['10/02','16:30','E','F', 'NA', 'NA]]

我确信这很简单,我只是想念它。

【问题讨论】:

  • 这不是代码编写服务。请展示您为实现这一目标所做的工作。
  • 您的最终结果无效,您需要在列表周围再添加一个[]
  • 添加NA 很容易。获取所有列表的最大长度。然后浏览所有列表,将NAmax_length - len(item) 副本添加到每个列表的末尾。

标签: python list split slice


【解决方案1】:

您可以轻松地使用itertools.groupby 将连续元素分组到同一个“斜线”元素下。然后得到一个组的最大长度并将“NA”附加到其他小于该长度的组。

from itertools import groupby, zip_longest

class SlashGrouper:
    def __init__(self):
        self.group_id = 0

    def __call__(self, text):
        if "/" in text:
            self.group_id += 1
        return self.group_id


my_list = ['09/30', '16:30','A','B','5','100','10/01','16:30','C','D','4', '10/02','16:30','E','F']
my_list_grouped = [list(group) for _, group in groupby(my_list, key=SlashGrouper())]
print(my_list_grouped)

max_len = len(max(my_list_grouped, key=lambda val: len(val)))
for group in my_list_grouped:
    group.extend(["NA"] * (max_len - len(group)))
print(my_list_grouped)

输出

[['09/30', '16:30', 'A', 'B', '5', '100'], ['10/01', '16:30', 'C', 'D', '4'], ['10/02', '16:30', 'E', 'F']]
[['09/30', '16:30', 'A', 'B', '5', '100'], ['10/01', '16:30', 'C', 'D', '4', 'NA'], ['10/02', '16:30', 'E', 'F', 'NA', 'NA']]

【讨论】:

  • 非常感谢。我知道这是一个更简单的解决方案。就是想不通。
  • 我已经投票了,因为它也教会了我一些东西,但是我确实注意到 OP 出于某种原因尚未显示任何工作;因此对问题本身投了反对票。
猜你喜欢
  • 1970-01-01
  • 2014-06-02
  • 2016-06-16
  • 2023-04-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多