Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/318.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_Sorting_Tuples - Fatal编程技术网

打包多个python元组并进行排序

打包多个python元组并进行排序,python,sorting,tuples,Python,Sorting,Tuples,问题:您需要编写一个程序,按升序对(名称、年龄、高度)元组进行排序,其中名称是字符串,年龄和高度是数字。元组由控制台输入。排序标准为: 1:按名称排序; 2:然后根据年龄进行排序; 3:然后按分数排序。优先顺序是姓名>年龄>分数。如果以下元组作为程序的输入:Tom,19,80 John,20,90 Jony,17,91 Jony,17,93 Json,21,85,那么程序的输出应该是:[('John','20','90'),('Jony','17','91'),('Jony','17','93'

问题:您需要编写一个程序,按升序对(名称、年龄、高度)元组进行排序,其中名称是字符串,年龄和高度是数字。元组由控制台输入。排序标准为:

1:按名称排序; 2:然后根据年龄进行排序; 3:然后按分数排序。优先顺序是姓名>年龄>分数。如果以下元组作为程序的输入:
Tom,19,80 John,20,90 Jony,17,91 Jony,17,93 Json,21,85
,那么程序的输出应该是:
[('John','20','90'),('Jony','17','91'),('Jony','17','93'),('Json','21','85'),('Tom 19','80')]

我的代码:

info = input()
info_list = [(name, age, height) for name, age, height in 
case.split(',') for case in info.split(' ')] 
sorted(info_list, key = lambda name:name[0])
我得到的错误是:
ValueError:要解压缩的值太多(预期为3个)


有人能帮忙吗

使用
排序
指定排序的基数

s = 'Tom,19,80 John,20,90 Jony,17,91 Jony,17,93 Json,21,85'

lst = [tuple(x.split(',')) for x in s.split()]

print(sorted(lst, key=lambda x: (x[0], x[1], x[2])))
# [('John', '20', '90'), ('Jony', '17', '91'), ('Jony', '17', '93'), ('Json', '21', '85'), ('Tom', '19', '80')]                                      [Program finished]
其中,
s
是您的输入字符串。

解决方案是:

info = input()
info_list = [case.split(',') for case in info.split(' ')] 
print(sorted(info_list))
示例输出:

Tom,19,80 John,20,90 Jony,17,91 Jony,17,93 Json,21,85
[['John', '20', '90'], ['Jony', '17', '91'], ['Jony', '17', '93'], ['Json', '21', '85'], ['Tom', '19', '80']]
解释代码不起作用的原因是:

  • 使用多个迭代器,只对一个序列有效,而只有一个序列无效

  • 为什么它不能与序列一起工作,它将尝试解压单个元素,即
    1
    ,它无法解压,因为它不是包含3个元素的iterable,这是它工作的主要原因,即
    [1,2,3]


谢谢!这是有用的。从概念上讲,你能告诉我
info_list=[(姓名、年龄、身高)代表姓名、年龄、身高在case.split(“”)中的case.split(“”)]
有什么问题吗?你的列表理解会抛出一个
name错误
,因为当它试图拆分
case
时,
case
没有定义。按空格拆分应在按逗号拆分之前进行。保持正确的状态,这是行不通的,因为您在迭代中要解包到三个变量。对分割的迭代将对每个分割进行迭代。当我说每次拆分时,它意味着一次迭代中的
'Tom'
,下一次迭代中的
19
,依此类推。这并不是说你在一次迭代中得到了所有三个
'Tom'
19
80
。因此出现了
ValueError
。请注意,最初的问题是询问大列表中的元组,如果是这样,您的解释是否仍然适用于我犯的错误?谢谢另外,当你说多个迭代器时,你是指
名称、年龄、高度
中的
[(姓名、年龄、高度)表示姓名、年龄、高度的case.split(“,”)表示信息中的case.split(“”)]
部分吗?@EdwardLin是的