我已经生成了一个很长的元组列表(格式如下)。列表中的每个元组都将time作为第一个元素,将一个事件作为第三个成员。第二个成员总是相同的,并从其他类似的列表中识别出我将不得不处理的列表。这些元组有许多不同的第三个元素,每个元素在不同的时间值上都有多个条目,这是第一个元素。
我正在尝试过滤列表,以删除每个事件(元组的第三个成员)的最小和最大时间值(元组中的第一项)之外的所有内容。我试着使用列表理解,但很快就被弄糊涂了。
('1.3433', 'VOLTAGE DEVIATION', 'DNLP2G23.575')
('1.3433', 'VOLTAGE DEVIATION', 'DNLP2G23.575')
('1.3433', 'VOLTAGE DEVIATION', 'DNLP2G23.575')
('1.3433', 'VOLTAGE DEVIATION', 'DNLP2G23.575')
('1.3433', 'VOLTAGE DEVIATION', 'DNLP2G23.575')
('1.3433', 'VOLTAGE DEVIATION', 'DNLP2G23.575')
('1.3433', 'VOLTAGE DEVIATION', 'DNLP2G23.575')
('1.3433', 'VOLTAGE DEVIATION', 'DNLP2G23.575')
('1.3433', 'VOLTAGE DEVIATION', 'DNLP2G23.575')
('1.3467', 'VOLTAGE DEVIATION', 'DNLP2G23.575')
('1.3467', 'VOLTAGE DEVIATION', 'DNLP2G23.575')
('1.3467', 'VOLTAGE DEVIATION', 'DNLP2G23.575')
('1.3467', 'VOLTAGE DEVIATION', 'DNLP1_G1.575')
('1.3467', 'VOLTAGE DEVIATION', 'DNLP1_G1.575')
('1.3467', 'VOLTAGE DEVIATION', 'DNLP1_G1.575')
('1.3467', 'VOLTAGE DEVIATION', 'DNLP1_G1.575')
('1.3533', 'VOLTAGE DEVIATION', 'DIFICULT 230')
('1.3533', 'VOLTAGE DEVIATION', 'DIFICULT 230')
('1.3533', 'VOLTAGE DEVIATION', 'DIFICULT 230')
('1.3533', 'VOLTAGE DEVIATION', 'DIFICULT 230')
('1.3533', 'VOLTAGE DEVIATION', 'DIFICULT 230')
('1.3533', 'VOLTAGE DEVIATION', 'DIFICULT 230')
('1.3533', 'VOLTAGE DEVIATION', 'DIFICULT 230')
('1.3533', 'VOLTAGE DEVIATION', 'DIFICULT 230')
('1.3533', 'VOLTAGE DEVIATION', 'DIFICULT 230')
('1.3567', 'VOLTAGE DEVIATION', 'DIFICULT 230')
('1.3600', 'VOLTAGE DEVIATION', 'DIFICULT 230')
('1.3600', 'VOLTAGE DEVIATION', '7MIHL G1.575')
('1.3600', 'VOLTAGE DEVIATION', '7MIHL G1.575')
('1.3600', 'VOLTAGE DEVIATION', '7MIHL G1.575')
('1.3600', 'VOLTAGE DEVIATION', '7MIHL G1.575')
('1.3600', 'VOLTAGE DEVIATION', '7MIHL G1.575')
('1.3600', 'VOLTAGE DEVIATION', '7MIHL G1.575')
('1.3600', 'VOLTAGE DEVIATION', '7MIHL G1.575')
('1.3600', 'VOLTAGE DEVIATION', '7MIHL G1.575')
('1.3600', 'VOLTAGE DEVIATION', '7MIHL G1.575')
('1.3600', 'VOLTAGE DEVIATION', '7MIHL G1.575')
('1.3800', 'VOLTAGE DEVIATION', '7MIHL G1.575')
('1.3800', 'VOLTAGE DEVIATION', '7MIHL G1.575')
('1.3800', 'VOLTAGE DEVIATION', 'HORIZ_G .575')
('1.3800', 'VOLTAGE DEVIATION', 'MEDBOWCO 115')
('1.3800', 'VOLTAGE DEVIATION', 'MEDBOWCO 115')
('1.3800', 'VOLTAGE DEVIATION', 'STNDPSVC 230')
('1.3800', 'VOLTAGE DEVIATION', 'STNDPSVC 230')
('1.3800', 'VOLTAGE DEVIATION', 'STNDPSVC 230')
('1.3800', 'VOLTAGE DEVIATION', 'STNDPSVC 230')
('1.3800', 'VOLTAGE DEVIATION', 'STNDPSVC 230')
('1.3800', 'VOLTAGE DEVIATION', 'STNDPSVC 230')
('1.3867', 'VOLTAGE DEVIATION', 'MINERS 34.5')
('1.3867', 'VOLTAGE DEVIATION', 'MINERS 34.5')
('1.3867', 'VOLTAGE DEVIATION', 'MINERS 34.5')
('1.3867', 'VOLTAGE DEVIATION', 'MINERS 34.5')
('1.3867', 'VOLTAGE DEVIATION', 'MINERS 34.5')
('1.3867', 'VOLTAGE DEVIATION', 'MINERS 34.5')
('1.3867', 'VOLTAGE DEVIATION', 'MINERS 34.5')
('1.3867', 'VOLTAGE DEVIATION', 'MINERS 34.5')
('1.3867', 'VOLTAGE DEVIATION', 'MINERS 34.5')
('1.3867', 'VOLTAGE DEVIATION', 'MINERS 34.5')
('1.3867', 'VOLTAGE DEVIATION', 'MINERS 34.5')
('1.3900', 'VOLTAGE DEVIATION', 'MINERS 34.5')
('1.3900', 'VOLTAGE DEVIATION', 'MINERS 34.5')
('1.3900', 'VOLTAGE DEVIATION', 'MINERS 34.5')
('1.3900', 'VOLTAGE DEVIATION', 'MINERS 34.5')
('1.3900', 'VOLTAGE DEVIATION', 'MINERS 34.5')
('1.3900', 'VOLTAGE DEVIATION', 'MINERS 34.5')
('1.3900', 'VOLTAGE DEVIATION', 'MINERS 34.5')
('1.3900', 'VOLTAGE DEVIATION', 'MINERS 34.5')
('1.3900', 'VOLTAGE DEVIATION', 'MINERS 34.5')
'1.4233', 'VOLTAGE DEVIATION', 'FT CRK2 34.5')
('1.4233', 'VOLTAGE DEVIATION', 'FT CRK2 34.5')
('1.4233', 'VOLTAGE DEVIATION', 'FT CRK2 34.5')
('1.4233', 'VOLTAGE DEVIATION', 'FT CRK2 34.5')
('1.4233', 'VOLTAGE DEVIATION', 'FT CRK2 34.5')
('1.4233', 'VOLTAGE DEVIATION', 'FT CRK2 34.5')
('1.4233', 'VOLTAGE DEVIATION', 'FT CRK2 34.5')
('1.4233', 'VOLTAGE DEVIATION', 'FT CRK2 34.5')
('1.4233', 'VOLTAGE DEVIATION', 'FT CRK2 34.5')
('1.4233', 'VOLTAGE DEVIATION', 'FT CRK2 34.5')
('1.4233', 'VOLTAGE DEVIATION', 'FT CRK2 34.5')
('1.4267', 'VOLTAGE DEVIATION', 'FT CRK2 34.5')
('1.4267', 'VOLTAGE DEVIATION', 'FT CRK2 34.5')
('1.4267', 'VOLTAGE DEVIATION', 'FT CRK2 34.5')
('1.4267', 'VOLTAGE DEVIATION', 'FT CRK2 34.5')
('1.4267', 'VOLTAGE DEVIATION', 'FT CRK2 34.5')
('1.4800', 'VOLTAGE DEVIATION', 'HIPLN_G .575')
('1.4800', 'VOLTAGE DEVIATION', 'HIPLN_G .575')
('1.4800', 'VOLTAGE DEVIATION', 'HIPLN_G .575')
('1.4800', 'VOLTAGE DEVIATION', 'HIPLN_G .575')
('1.4800', 'VOLTAGE DEVIATION', 'HIPLN_G .575')
('1.4800', 'VOLTAGE DEVIATION', 'HIPLN_G .575')
('1.4800', 'VOLTAGE DEVIATION', 'HIPLN_G .575')
('1.4800', 'VOLTAGE DEVIATION', 'HIPLN_G .575')
('1.4800', 'VOLTAGE DEVIATION', 'HIPLN_G .575')
('1.4833', 'VOLTAGE DEVIATION', 'HIPLN_G .575')
('1.4833', 'VOLTAGE DEVIATION', 'HIPLN_G .575')
('1.4833', 'VOLTAGE DEVIATION', 'HIPLN_G .575')
('1.4833', 'VOLTAGE DEVIATION', 'HIPLN_G .575')
('1.4833', 'VOLTAGE DEVIATION', 'HIPLN_G .575')筛选后的结果为
('1.3433', 'VOLTAGE DEVIATION', 'DNLP2G23.575')
('1.3467', 'VOLTAGE DEVIATION', 'DNLP2G23.575')
('1.3467', 'VOLTAGE DEVIATION', 'DNLP1_G1.575')
('1.3467', 'VOLTAGE DEVIATION', 'DNLP1_G1.575')
('1.3533', 'VOLTAGE DEVIATION', 'DIFICULT 230')
('1.3600', 'VOLTAGE DEVIATION', 'DIFICULT 230')
('1.3600', 'VOLTAGE DEVIATION', '7MIHL G1.575')
('1.3800', 'VOLTAGE DEVIATION', '7MIHL G1.575')
('1.3800', 'VOLTAGE DEVIATION', 'HORIZ_G .575')
('1.3800', 'VOLTAGE DEVIATION', 'MEDBOWCO 115')
('1.3800', 'VOLTAGE DEVIATION', 'MEDBOWCO 115')
('1.3800', 'VOLTAGE DEVIATION', 'STNDPSVC 230')
('1.3800', 'VOLTAGE DEVIATION', 'STNDPSVC 230')
('1.3800', 'VOLTAGE DEVIATION', 'STNDPSVC 230')
('1.3867', 'VOLTAGE DEVIATION', 'MINERS 34.5')
('1.3900', 'VOLTAGE DEVIATION', 'MINERS 34.5')
'1.4233', 'VOLTAGE DEVIATION', 'FT CRK2 34.5')
('1.4267', 'VOLTAGE DEVIATION', 'FT CRK2 34.5')
('1.4800', 'VOLTAGE DEVIATION', 'HIPLN_G .575')
('1.4833', 'VOLTAGE DEVIATION', 'HIPLN_G .575')`我正在尝试下面的代码,但我得到了一个错误。我是个新手,所以如果我做错了什么,请告诉我。代码中的m1是我从findall生成的元组列表。我已经在我的代码顶部导入了ast。
m1 = re.findall(pattern1,wholefile)
m1=[ast.literal_eval(t) for t in m1]
m1=[(float(a),b,c) for a,b,c in m1]
keys=sorted({t[2] for t in m1})
for key in keys:
group=filter(lambda t: t[2]==key,m1)
print '{}:\n\tmax: {}\n\tmin: {}'.format(key,max(group),min(group))发布于 2012-09-07 01:08:13
这是有效的(只要你真的有一个元组列表,第一个值是一个浮点数):
keys=sorted({t[2] for t in tups})
for key in keys:
group=filter(lambda t: t[2]==key,tups)
print '{}:\n\tmax: {}\n\tmin: {}'.format(key,max(group),min(group))打印:
MIHL G1.575:
max: (1.38, 'VOLTAGE DEVIATION', '7MIHL G1.575')
min: (1.36, 'VOLTAGE DEVIATION', '7MIHL G1.575')
DIFICULT 230:
max: (1.36, 'VOLTAGE DEVIATION', 'DIFICULT 230')
min: (1.3533, 'VOLTAGE DEVIATION', 'DIFICULT 230')
DNLP1_G1.575:
max: (1.3467, 'VOLTAGE DEVIATION', 'DNLP1_G1.575')
min: (1.3467, 'VOLTAGE DEVIATION', 'DNLP1_G1.575')
DNLP2G23.575:
max: (1.3467, 'VOLTAGE DEVIATION', 'DNLP2G23.575')
min: (1.3433, 'VOLTAGE DEVIATION', 'DNLP2G23.575')
FT CRK2 34.5:
max: (1.4267, 'VOLTAGE DEVIATION', 'FT CRK2 34.5')
min: (1.4233, 'VOLTAGE DEVIATION', 'FT CRK2 34.5')
HIPLN_G .575:
max: (1.4833, 'VOLTAGE DEVIATION', 'HIPLN_G .575')
min: (1.48, 'VOLTAGE DEVIATION', 'HIPLN_G .575')
HORIZ_G .575:
max: (1.38, 'VOLTAGE DEVIATION', 'HORIZ_G .575')
min: (1.38, 'VOLTAGE DEVIATION', 'HORIZ_G .575')
MEDBOWCO 115:
max: (1.38, 'VOLTAGE DEVIATION', 'MEDBOWCO 115')
min: (1.38, 'VOLTAGE DEVIATION', 'MEDBOWCO 115')
MINERS 34.5:
max: (1.39, 'VOLTAGE DEVIATION', 'MINERS 34.5')
min: (1.3867, 'VOLTAGE DEVIATION', 'MINERS 34.5')
STNDPSVC 230:
max: (1.38, 'VOLTAGE DEVIATION', 'STNDPSVC 230')
min: (1.38, 'VOLTAGE DEVIATION', 'STNDPSVC 230')根据你的评论,你的声音确实有看起来像元组的文本。因此,要将其转换为实际的元组:
import ast
tups=[ast.literal_eval(t) for t in tups]
tups=[(float(a),b,c) for a,b,c in tups]发布于 2012-09-07 00:47:10
将你的元组重构成一个字典会让事情变得更容易。
from collections import defaultdict
d = defaultdict(list)
for t,_,v in your_tuple_list:
d[v].append(t)在此之后,d为每个事件提供了一个键,并列出了该时间段的相关时间。
它将看起来像这样(某种程度上):
>>> d['DNLP2G23.575']
['1.3433'....]现在问题变成了寻找每个列表的最小和最大值;使用min()和max()很容易做到这一点
一旦你遍历了它,你就会得到你想要的顺序的数据集;你可以把它转换回一个元组/列表/等等。
如果你很热衷,你可以把这个列表转换成一个set,这将消除重复的时间,并通过加快最小/最大来节省你的时间;假设它是你必须计算的一个大的元组列表。
您还应该将您的时间转换为float -您可以在主循环:d[v].append(float(t))中执行此操作。这是为了确保最大值和最小值正常工作。
发布于 2012-09-07 00:51:33
使用itertools.groupby实现以下目标:
>>> import itertools
>>> import operator
>>> results = []
>>> for key, group in itertools.groupby(tuplelist, operator.itemgetter(2)):
... group = list(group)
... results.append(min(group))
... results.append(max(group))
...
>>> pprint.pprint(results)
[('1.3433', 'VOLTAGE DEVIATION', 'DNLP2G23.575'),
('1.3467', 'VOLTAGE DEVIATION', 'DNLP2G23.575'),
('1.3467', 'VOLTAGE DEVIATION', 'DNLP1_G1.575'),
('1.3467', 'VOLTAGE DEVIATION', 'DNLP1_G1.575'),
('1.3533', 'VOLTAGE DEVIATION', 'DIFICULT 230'),
('1.3600', 'VOLTAGE DEVIATION', 'DIFICULT 230'),
('1.3600', 'VOLTAGE DEVIATION', '7MIHL G1.575'),
('1.3800', 'VOLTAGE DEVIATION', '7MIHL G1.575'),
('1.3800', 'VOLTAGE DEVIATION', 'HORIZ_G .575'),
('1.3800', 'VOLTAGE DEVIATION', 'HORIZ_G .575'),
('1.3800', 'VOLTAGE DEVIATION', 'MEDBOWCO 115'),
('1.3800', 'VOLTAGE DEVIATION', 'MEDBOWCO 115'),
('1.3800', 'VOLTAGE DEVIATION', 'STNDPSVC 230'),
('1.3800', 'VOLTAGE DEVIATION', 'STNDPSVC 230'),
('1.3867', 'VOLTAGE DEVIATION', 'MINERS 34.5'),
('1.3900', 'VOLTAGE DEVIATION', 'MINERS 34.5'),
('1.4233', 'VOLTAGE DEVIATION', 'FT CRK2 34.5'),
('1.4267', 'VOLTAGE DEVIATION', 'FT CRK2 34.5'),
('1.4800', 'VOLTAGE DEVIATION', 'HIPLN_G .575'),
('1.4833', 'VOLTAGE DEVIATION', 'HIPLN_G .575')]备注:
key参数传递给min和max,以使其使用不同的值https://stackoverflow.com/questions/12304587
复制相似问题