遍历 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']
我正在尝试遍历 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']