Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/rust/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python-在包含字符串和数字的列表中对数字值进行排序_Python_List_Sorting - Fatal编程技术网

Python-在包含字符串和数字的列表中对数字值进行排序

Python-在包含字符串和数字的列表中对数字值进行排序,python,list,sorting,Python,List,Sorting,我创建了一个列表,其中包含python中一个分数文件中的所有信息 scores.txt文件: Dan Danson,9,6,1 John Johnson,5,7,10 Mike Mikeson,10,7,6 我这样做是为了将.txt文件中的信息保存到二维列表中: f = open(filename, 'r') lines = f.readlines() f.close() scores = [] for line in lines: #Loads lines into a 2d list

我创建了一个列表,其中包含python中一个分数文件中的所有信息

scores.txt文件:

Dan Danson,9,6,1
John Johnson,5,7,10
Mike Mikeson,10,7,6
我这样做是为了将.txt文件中的信息保存到二维列表中:

f = open(filename, 'r')
lines = f.readlines()
f.close()

scores = []
for line in lines: #Loads lines into a 2d list
    currentline = line.strip('\n').split(",")
    scores.append(currentline)
现在我有一份清单:

[['Dan Danson', '1', '6', '9'], ['John Johnson', '5', '7', '10'], ['Mike Mikeson', '10', '7', '6']]
从这个列表中,我想对列表中的数字进行排序,以便它们从最高到最低排列,因此我得到一个如下列表:

[['Dan Danson', '9', '6', '1'], ['John Johnson', '10', '7', '5'], ['Mike Mikeson', '10', '7', '6']]
最后,我希望能够打印从高到低排列的列表

Mike Mikeson,10,7,6
John Johnson,10,7,5
Dan Danson,9,6,1
将与用作键函数:

>>> rows = [
...     ['Dan Danson', '1', '6', '9'],
...     ['John Johnson', '5', '7', '10'],
...     ['Mike Mikeson', '10', '7', '6'],
... ]
>>>
>>> rows = [row[:1] + sorted(row[1:], key=int, reverse=True) for row in rows]
>>> sorted(rows, key=lambda row: sum(map(int, row[1:])), reverse=True)
[['Mike Mikeson', '10', '7', '6'],
 ['John Johnson', '10', '7', '5'],
 ['Dan Danson', '9', '6', '1']]
  • 排序(行[1:],…)
    :分隔数字值和排序
  • 行[:1]
    :以列表的形式命名,或者您可以使用
    [行[0]]
    。应该是要连接到数字字符串列表的列表
使用和将字符串强制转换为整数:

>>> l = [['Dan Danson', '9', '6', '1'], ['John Johnson', '10', '7', '5'], ['Mike Mikeson', '10', '7', '6']]
>>> for e in l:
...     print(e[0], *sorted(list(map(int, e[1:]))))
...     
... 
Dan Danson 1 6 9
John Johnson 5 7 10
Mike Mikeson 6 7 10

你也可以这样处理这个问题。我首先将所有等级转换为整数类型,以便保持lambda函数干净。我本可以在lambda函数中进行转换,但我并不喜欢它

您可以看到将每个问题分解为不同的模块,从而提供了可重用性

test = [['Dan Danson', '1', '6', '9'], ["Karthikeyan", 10, 10, 10], ['John Johnson', '5', '7', '10'], ['Mike Mikeson', '10', '7', '6']]

def covert_to_integer(test):
    """
    Coverting all grades into integer type
    """
    for outer_index, item in enumerate(test):
        for inner_index, element in enumerate(item[1:], 1):
            test[outer_index][inner_index] = int(element)
    return sorting_by_sum(test)

def sorting_by_sum(test):
    """
    Sorting the records by sum of the grades. 
    """
    return sorted(test, key=lambda record: record[1]\
                                   + record[2] \
                                   + record[3], reverse=True)

if __name__ == "__main__":
    print covert_to_integer(test)
您甚至可以在lambda函数中使用list的sum方法。像这样:

return sorted(test, key=lambda record: sum(record[1:])\
                                   ,reverse=True)

您需要将数字与字符串隔离。。。也许做一个关联数组,把你的名字作为键。在python中查找字典,看看是否有帮助..谢谢,但是我如何对列表进行排序,以使“高分”最高的名称位于顶部(列表的第一个元素)。如果两个人的高分是10分,我想比较他们的第二高分,看看谁的分数更高,如果是相同的,比较他们的第三高分,得到我放在我文章底部的最终结果。干杯。@Tizer1000,您需要另一个
排序
lambda行:sum(map(int,row[1:])
来获得总数。您能编辑上面的代码来显示吗?谢谢大家!@Tizer1000,我更新了答案。对不起,我错过了开头的最后一部分。谢谢你的反馈。