学习一门新语言最令人沮丧的事情之一就是你不知道该怎么做。我想执行,应该是一个简单的任务,但我正在努力实现它。
我想跟踪我已经遍历的项目及其位置。 当我找到一个项目时,我能够回顾这个集合,看看它是否已被看到,如果是,它的位置是什么(行号)。然后,我想查看当前项目之前找到的最后一项,并查看它的名称和位置。
我正在解析一些非结构化文本,有时我会在单词部分的非预期部分进行匹配。
采取以下措施:
'Item 1', 150
'Item 2', 340
'Item 3', 794
'Item 4', 1205
'Item 5', 1869
'Item 2', 3412 <-- I've seen 2, So I want to inspect the item before it (5, 1869)
我的想法是测试2到5之间的距离,并确定它是否是噪音。 在这种情况下,我想要放弃(第2,31212项),因为2应该在5之前,而第3412行与之前的2(第340行)相距很远,并且在最后一次看到之间也有顺序项“项目和这一项。
当然,如果有人有更好的想法,我也是为了这一切。
我不知道如何在python中运行集合。我甚至不确定我应该使用什么类型的收藏品。我此刻似乎赞成配对元组的列表,但这可能只是我的愚蠢。
感谢任何指导。
for line_num, line in enumerate(all_lines):
# matching requires back-tracking - we will always be at least 1 line behind loop
if line_num < 1: continue
blob = ''.join(all_lines[line_num : line_num + _blob_length_])
# evaluate text aginst match expressions
matches = self.match_patterns_sb(blob) if is_sb_edition else self.match_patterns(blob)
#iterate each pattern and test if match was successful
for pattern in matches.iterkeys():
if matches[pattern] and line_num >= last_line_matched + 1: #Try not to rematch
if pattern == last_matched_pattern and line_num < (last_line_matched + 2) :continue
#store match info in a local tuple nested within a higher level list
if not '(continued)' in blob.lower() and not '( continued )' in blob.lower():
print '{0} - {1}'.format(pattern, line_num)
'''
At this point I want to look into last_seen, and
1) Get the last seen item that matches this one ('Item 2')
2) Get the last item added into last_seen
3) do some calculations
'''
last_seen[pattern] = line_num
if pattern in dict(section_items).keys():
test = dict(section_items)
existing_line = test[pattern]
print '{0} exists with LINE NUMBER {1}'.format(pattern, existing_line)
section_items.append( (pattern, line_num) )
# track last match
last_line_matched = line_num
last_matched_pattern = pattern
# order and normalize the item matches
fixed_list = OrderedDict(self.sorted_nicely(section_items, itemgetter(0))).items()
答案 0 :(得分:3)
使用dict
累计内容,检查您是否在每次之前都看过它。
sequence = [('item 1',150),('item 2',340),('item 3',794),('item 4',1205,),('item 5',1869),('item 2',3412)]
d = {}
for i,tup in enumerate(sequence):
item,val = tup
if d.get(item):
print("I've seen {} before, it was {} at index {}".format(item,*d.get(item)))
d[item] = (val, i)
#I've seen item 2 before, it was 340 at index 1
d
将始终显示您最后一次看到item
或None
。
如果您需要跟踪所有过去看过item
的次数,请向上移动defaultdict
以累积(item, i)
个元组到你的list
。