显示前两个差异最大的汽车记录



如何在python中显示与文本文件差异最大的前两行例如,这里有一个文本文件:

Mazda 64333 53333
Merce 74321 54322
BMW   52211 31432

预期输出为

Merce 74321 54322
BMW   52211 31432

我尝试了多个代码,但只显示了实际的差异,而不是整行。

这对你有用吗?

from operator import itemgetter
with open("x.txt", "r+") as data:
data = [i.split() for i in data.readlines()]
top = sorted([[row[0], int(row[1])-int(row[2])]for row in data],key=itemgetter(1), reverse=True)
print(top)
print(top[:2])
[['BMW', 20779], ['Merce', 19999], ['Mazda', 11000]]
[['BMW', 20779], ['Merce', 19999]]

所以,乍一看,这可能看起来有点复杂,但事实并非如此!

让我们分解一下下面程序的每个步骤

from operator import itemgetter
with open("x.txt", "r+") as data:
data = [i.split() for i in data.readlines()]
top = sorted([[row[0], int(row[1])-int(row[2])]for row in data],key=itemgetter(1), reverse=True)

现在,我们首先要注意,operator是一个内置包,它不是像请求这样的库的外部导入,itemgetter是一个非常简单的函数。

with open("x.txt", "r+") as data也应该非常直接。。。所做的只是打开一个具有读取权限的文本文件,并将该对象存储在data中。

然后我们使用我们的第一个列表理解,这对你来说可能是新的。。。

data = [i.split() for i in data.readlines()]

所有这些都是通过每一行(例如car 123 122(,并将其按空格拆分为类似["car", "123", "122"]的列表。

现在,如果你仔细观察它的产物,就会发现有些问题。最后两个元素(需要是整数才能找到差异(是字符串!因此,为什么我们必须使用下一个列表理解来改变这一点。

top = sorted([[row[0], int(row[1])-int(row[2])]for row in data],key=itemgetter(1), reverse=True)

这有点复杂。。。但它真正做的只是对一个简单的列表理解进行排序。

它遍历data中的每个值并得到差异!让我们看看它是如何做到这一点的。

正如您所知,我们的数据现在看起来有点像[["car", "123", "122"], ["car1", "1234", "1223"]]。因此,我们可以用[1][2]访问["car", "123", "122"]的整数值,有了这些知识,我们可以对数据进行循环,并获得它们被转换为整数时的差值。例如CCD_ 13的CCD_ 12将返回CCD_。

有了这些知识,我们可以创建一个新的列表,其中包含:汽车名称row[0]和列表comp中由[row[0], int(row[1])-int(row[2])]表示的差异int(row[1])-int(row[2])。当在数据中使用行作为每个可迭代项时,我们可以很容易地形成这个!以下是清单本身的理解:

[[row[0], int(row[1])-int(row[2])] for row in data]

最后,我们来到了这个小程序的最后一部分。。。sorted功能!sorted()将根据您给它的键返回一个排序列表(您可以使用reverse=True首先获得最大值(。当它缩写如下时,其实并不难理解:

sorted([the list comprehension],key=itemgetter(1), reverse=True)

所以,虽然你可能知道,是的,它是对我们所做的列表理解进行排序,并首先列出最大的值,但你可能不知道它是如何排序的!要知道它是如何排序的,我们需要查看key

CCD_ 22是运算符类的函数。关于它,你真正需要知道的是,它得到了给定列表的第一个索引,并因此进行排序。如果您能回忆起我们数据中的每个元素看起来都像["car", difference](difference只是实际整数差的占位符(。既然我们想要最大的差异,那么按它们排序是有意义的,对吧?

使用CCD_ 25,它将按照第一个索引进行排序差异!这几乎可以概括为:(

我们将所有这些存储到变量top中,然后使用print(top[:2])打印前两个元素

我希望这能有所帮助!

创建一个dict,其中包含以汽车品牌为关键的每一行的距离。然后,您可以使用valuesdict.items()进行排序,并返回前2个

最新更新