繁体   English   中英

Python中的分组列表

Grouping Lists in Python

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

我试图基于一个共同的索引将许多列表组合在一起。 公用索引是儒略日期(JD),我想将共享相同JD的其他列表中的所有其他时间合并到包含单个JD和所有各自时间的单个列表中。 但是,我不断收到“ TypeError:列表索引必须是整数,而不是元组”,而且我不确定为什么会发生这种情况。 我最初不是将变量“ list_of_lsts”分配给实际的列表列表,还是在循环中弄乱了某个地方。 我的最终结果如下:

['2014-158', '20:07:11.881', '20:43:04.546', '20:43:47.447', '21:11:08.997', '21:11:16.697', '21:22:07.717']
['2014-163', '17:12:09.071', '17:38:08.219', '17:38:28.310', '17:59:25.649','18:05:59.536', '18:09:53.243','18:13:47.671', '18:16:53.976', '18:20:31.538', '18:23:02.243']

我将在许多朱利安日期中执行此操作,因此循环是必要的。 我是一名新程序员,并且大多数都是Python 2.7.8的新手,所以请原谅您的无知和大量错误。 谢谢。

lst_of_lsts = (['2014-158', '20:07:11.881', '20:43:04.546']
               ['2014-158', '20:43:47.447', '21:11:08.997']
               ['2014-158', '21:11:16.697', '21:22:07.717']
               ['2014-163', '17:12:09.071', '17:38:08.219']
               ['2014-163', '17:38:28.310', '17:59:25.649']
               ['2014-163', '18:05:59.536', '18:09:53.243']
               ['2014-163', '18:13:47.671', '18:16:53.976']
               ['2014-163', '18:20:31.538', '18:23:02.243'])


def merge_subs(lst_of_lsts):
    res = []
    for row in lst_of_lsts:
        for i, resrow in enumerate(res):
            if row[0]==resrow[0]:
                res[i] += row[1:]
                break
            else:
                res.append(row)
        return res
2 个回复

改成

lst_of_lsts = (['2014-158', '20:07:11.881', '20:43:04.546'],
['2014-158', '20:43:47.447', '21:11:08.997'],
['2014-158', '21:11:16.697', '21:22:07.717'],
['2014-163', '17:12:09.071', '17:38:08.219'],
['2014-163', '17:38:28.310', '17:59:25.649'],
['2014-163', '18:05:59.536', '18:09:53.243'],
['2014-163', '18:13:47.671', '18:16:53.976'],
['2014-163', '18:20:31.538', '18:23:02.243'])

也就是说,您缺少逗号。

我建议的另一个变化是:

for i, resrow in enumerate(res):
        if row[0]==resrow[0]:
            res[i] += row[1:]

这里的res[i]resrow是相同的东西-更改一个将更改另一个。 无需同时使用它们。 相反做

for resrow in res:
    if row[0] == resrow[0]:
        resrow += row[1:]

另外-按照当前缩进,如果if失败,则else将不会完成。 相反,它将在for循环之后完成。 我认为那不是您想要的。

确实,您想使用字典。

def merge_subs2(lst_of_lsts):
    date_dict = {}
    for row in lst_of_lsts:
        if row[0] not in date_dict:
            date_dict[row[0]] = [row[0]] #note that I'm putting row[0] here already.
        date_dict[row[0]].extend(row[1:])
    returnlist = date_dict.values()
    returnlist.sort()   #sorting because dicts don't have an order to them.
    return returnlist
def merge_subs(L):
    dates = {}
    for sub in L:
        date = sub[0]
        if date not in dates:
            dates[date] = []
        dates[date].extend(sub[1:])
    answer = []
    for date in sorted(dates):
        answer.append([date] + dates[date])
    return answer

输出:

In [28]: lst_of_lsts = (['2014-158', '20:07:11.881', '20:43:04.546'],
['2014-158', '20:43:47.447', '21:11:08.997'],
['2014-158', '21:11:16.697', '21:22:07.717'],
['2014-163', '17:12:09.071', '17:38:08.219'],
['2014-163', '17:38:28.310', '17:59:25.649'],
['2014-163', '18:05:59.536', '18:09:53.243'],
['2014-163', '18:13:47.671', '18:16:53.976'],
['2014-163', '18:20:31.538', '18:23:02.243'])

In [29]: merge_subs(lst_of_lsts)
Out[29]: [['2014-158', '20:07:11.881', '20:43:04.546', '20:43:47.447', '21:11:08.997', '21:11:16.697', '21:22:07.717'], 
          ['2014-163', '17:12:09.071', '17:38:08.219', '17:38:28.310', '17:59:25.649', '18:05:59.536', '18:09:53.243', '18:13:47.671', '18:16:53.976', '18:20:31.538', '18:23:02.243']]
2 在python中将两个列表分组

我有两个列表,希望根据列表的第一个元素进行分组。 这里,列表内列表中的第一个元素是“ 1”,“ 2”和“ 3”。 我希望我的最终名单像:- 我已经尝试使用下面的代码。 这段代码有效,但是我想知道是否有一种简单而干净的方法 有什么帮助吗? ...

4 使用python对列表进行分组和排序

我正在尝试使用一个列表对另一个列表进行排序,并使它们同时保持同步: 我想使用键列表将数据列表组织到相同键的子组中。 我还想确保列表在每个子组中排序。 到目前为止,我能够正确地进行所有排序: 我还想念什么? 谢谢! ...

5 在Python中对嵌套列表进行排序和分组

我有以下数据结构(列表清单) 我希望能够 使用函数对列表重新排序,以便我可以按列表中的每个项目进行分组。 例如,我希望能够按第二列分组(这样所有21个都在一起) 使用函数仅显示每个内部列表中的某些值。 例如,我想将此列表缩小为仅包含'2somename'的第4个字段 ...

2009-01-03 17:05:30 8 52759   python
7 在Python中将数字列表分组在一起

我有以下内容,这是Python中列表的列表,并且是我拥有的部分值列表: 有没有一种将它们分组的方法,以便它们收集每个列表中共有的值? 例如,如果我查看第一个列表[1,33],则可以看到该值存在于第三个列表中:[5,1,33,44] 因此,这些被分组为 [5,1,33,4 ...

8 Python:按字母顺序对列表列表进行排序/分组

我觉得已经有人问过了,但是问题的答案对我的代码不起作用。 我正在尝试根据第一个list [2]按字母顺序对列表列表进行排序,然后在按list [3],然后按list [4]排序的匹配条目内进行排序。 实际数据更大,并且每个列表中都有更多条目,但有一个示例: 我已经尝试过类似问题作 ...

10 在 Python 中的浮点数列表中对数据进行分组

我从 API 收到以下订单数据: 这只是数据的一个片段,整个列表很大,大约有 999 个元素。 由于这个列表太大了,我正在考虑一些减少它的方法,这是我想出的: 分组数据:我只能有9656 ,而不是9656.37 、 9656.32 、 9656.21 。 这样会收到大量的数据。 这样做的问题是 ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2022 STACKOOM.COM