遍历 Python 二维列表以查找值

Iterating over a Python 2D list to find the value

我正在尝试遍历 Python 二维列表。当算法遍历列表时,它会将键添加到新列表,直到检测到新值。然后对列表应用一个操作,然后清空列表,以便可以再次使用它,如下所示:

original_list = [('4', 'a'), ('3', 'a'), ('2', 'a'), ('1', 'b'), ('6', 'b')]

当算法读取 original_list 时,它应该评估每个对象的第二个值,如果它与前一个值不同则解密;如果没有,请将其添加到临时列表中。

这是伪代码

temp_list = []
new_value = original_list[0][1] #find the first value

for key, value in original_list:
    if value != new_value:
        temp_list.append(new_value)

应该输出

temp_list = ['4', '3', '2']
temp_list = []
prev_value = original_list[0][1]

for key, value in original_list:
    if value == prev_value:
        temp_list.append(key)
    else:
        do_something(temp_list)
        print temp_list
        temp_list = [key]
    prev_value = value

do_something(temp_list)
print temp_list

# prints ['4', '3', '2']
# prints ['1', '6']

不完全确定你在问什么,但我认为 itertools.groupby 可以帮助:

>>> from itertools import groupby
>>> original_list = [('4', 'a'), ('3', 'a'), ('2', 'a'), ('1', 'b'), ('6', 'b')]
>>> [(zip(*group)[0], k) for k, group in groupby(original_list, key=lambda x: x[1])]
[(('4', '3', '2'), 'a'), (('1', '6'), 'b')]

这是做什么的:它将列表中的项目按 key=lambda x: x[1] 的值分组,并获取与一个值对应的键的元组 (zip(*group)[0], k)

如果您的 "keys" 不重复自己,您可以只使用 defaultdict 到 "sort" 基于键的值,然后提取您需要的内容

from collections import defaultdict
ddict = defaultdict(list)
for v1, v2 in original_list:
    ddict[v2].append(v1)

ddict 值现在都是 temp_list:

>>> ddict["a"]
['4', '3', '2']