提示:本站收集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
改成
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']]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.