Python 二维列表 如何获取有关某数据最大/小值对应的子列表?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python 二维列表 如何获取有关某数据最大/小值对应的子列表?相关的知识,希望对你有一定的参考价值。
例如:
Test_list=[ ["A",99],["D",64],["E",62],["B",99],["C",73],["F",62] ,["H",69],["G",62] ]
目标1-获取列表中分数最高的同学名单:
>>>[ ["A",99], ["B",99] ]
目标2-获取列表中分数最低的同学名单:
>>>[ ["E",62],["F",62],["G",62] ]
举个例子,如果你有一个二维列表 matrix,并希望获取其中和最大的子列表。
你可以使用以下代码:
max_sublist = max(matrix, key = sum)
这段代码将会使用 sum 函数来计算每个子列表的和,并返回和最大的子列表。
如果您希望获取最小值对应的子列表,只需要把 max() 改成 min()就可以了。
同理,如果你想获取最大/小值对应的子列表并且最大/小值是二维列表中的某个元素。
比如:
matrix = [[1,2,3],[4,5,6],[7,8,9]]
max_sublist = max(matrix, key = lambda x : max(x))
这样就可以获取到二维列表中最大值所在的子列表。
请注意,这只是一种做法,并非唯一做法。您可能需要根据自己的需求来进行调整。 参考技术A 你可以使用Python中的内置函数 min() 或 max() 来获取二维列表中最大/小值对应的子列表。
举个例子,如果你有一个二维列表 matrix,并希望获取其中和最大的子列表。
你可以使用以下代码:
max_sublist = max(matrix, key = sum)
这段代码将会使用 sum 函数来计算每个子列表的和,并返回和最大的子列表。
如果您希望获取最小值对应的子列表,只需要把 max() 改成 min()就可以了。
同理,如果你想获取最大/小值对应的子列表并且最大/小值是二维列表中的某个元素。
比如:
matrix = [[1,2,3],[4,5,6],[7,8,9]]
max_sublist = max(matrix, key = lambda x : max(x))
这样就可以获取到二维列表中最大值所在的子列表。
请注意,这只是一种做法,并非唯一做法。您可能需要根据自己的需求来进行调整。本回答被提问者采纳 参考技术B Python提供了几个方法来发现一个二维的最大和最小值列表。max()和min()函数可以用来找到最大的和最小的元素列表,设置,或者数组。得到相对应的子表的最大或最小值,您可以使用索引()函数来找到元素的索引,然后使用切片子列表。例如,如果你有一个二维表称为“加勒比海盗”,您可以使用arr.index (max (arr))来获得最大的索引值,然后使用arr得到其相应的子列表。NumPy数组也提供类似的功能寻找二维数组中的最大和最小值。 参考技术C 你可以使用 Python 语言中的 max 和 min 函数来获取二维列表中的最大/最小值,然后再遍历列表,找出具有相应值的子列表。也可以使用 Python 中的其他语法工具获取指定的子列表。 参考技术D 可以遍历,的
如何在python中将一维值列表转换为0和1的二维网格[重复]
【中文标题】如何在python中将一维值列表转换为0和1的二维网格[重复]【英文标题】:How to transform 1D list of values to 2D grid of 0's and 1's in python [duplicate] 【发布时间】:2020-05-10 02:36:49 【问题描述】:我想获取一个值列表并将它们转换为 0 和 1 的表(2D 列表),源列表中的每个唯一数字有一列,原始行数相同。如果该列索引与原始值 1 匹配,则每行将有一个 1。
我有完成这项任务的代码,但我想知道是否有更好/更快的方法来完成它。 (与下面的简化集相比,实际数据集有数百万个条目)
示例输入:
value_list = [1, 2, 1, 3, 6, 5, 4, 3]
期望的输出:
output_table = [[1, 0, 0, 0, 0, 0],
[0, 1, 0, 0, 0, 0],
[1, 0, 0, 0, 0, 0],
[0, 0, 1, 0, 0, 0],
[0, 0, 0, 0, 0, 1],
[0, 0, 0, 0, 1, 0],
[0, 0, 0, 1, 0, 0],
[0, 0, 1, 0, 0, 0]]
当前解决方案:
value_list = [1, 2, 1, 3, 6, 5, 4, 3]
max_val = max(value_list)
# initialize to table of 0's
a = [([0] * max_val) for i in range(len(value_list))]
# overwrite with 1's where required
for i in range(len(value_list)):
j = value_list[i] - 1
a[i][j] = 1
print(f'a = ')
for row in a:
print(f'row')
【问题讨论】:
如果您要处理大量数据,则可能值得使用 NumPy。它是什么样的数据? 它来自一个文本文件(我在另一个步骤中将其提取到一维值列表中)。源数据中的所有数字都是整数。 这基本上是one-hot编码。如果你可以使用 NumPy,你的生活会更轻松。我已经标记了一个副本供您查看 如果您正在寻找减少处理(甚至可能是内存),可以将numpy.ndarray
子类化,这样底层数据只是value_list
的内容,但返回的视图看起来像output_table
。
import numpy as np; a = np.array([1, 2, 1, 3, 6, 5, 4, 3]); b = np.arange(1,a.max()+1); c = 1 * (a[:,None] == b[None,:])
【参考方案1】:
你可以这样做:
import numpy as np
value_list = [1, 2, 1, 3, 6, 5, 4, 3]
# create matrix of zeros
x = np.zeros(shape=(len(value_list), max(value_list)), dtype='int')
for i,v in enumerate(value_list):
x[i,v-1] = 1
print(x)
输出:
[[1 0 0 0 0 0]
[0 1 0 0 0 0]
[1 0 0 0 0 0]
[0 0 1 0 0 0]
[0 0 0 0 0 1]
[0 0 0 0 1 0]
[0 0 0 1 0 0]
[0 0 1 0 0 0]]
【讨论】:
您可以在创建初始数组x
后,通过x[np.arange(len(value_list)), np.array(value_list) - 1] = 1
不循环地同时分配所有行。【参考方案2】:
你可以试试这个:
dummy_list = [0]*6
output_table = [dummy_list[:i-1] + [1] + dummy_list[i:] for i in value_list]
输出:
output_table = [[1, 0, 0, 0, 0, 0],
[0, 1, 0, 0, 0, 0],
[1, 0, 0, 0, 0, 0],
[0, 0, 1, 0, 0, 0],
[0, 0, 0, 0, 0, 1],
[0, 0, 0, 0, 1, 0],
[0, 0, 0, 1, 0, 0],
[0, 0, 1, 0, 0, 0]]
【讨论】:
以上是关于Python 二维列表 如何获取有关某数据最大/小值对应的子列表?的主要内容,如果未能解决你的问题,请参考以下文章
在python中找到二维矩阵(二维)中不同列表的最小值、最大值和平均值
python使用np.argsort对一维numpy概率值数据排序获取倒序索引获取的top索引(例如top2top5top10)索引二维numpy数组中对应的原始数据:原始数据概率最大的头部数据