Python 通过列表列表映射按元素打印列表
我有一个以列表形式表示的表格:Python 通过列表列表映射按元素打印列表,python,Python,我有一个以列表形式表示的表格: table = [[1, 9695],[2, 4755],[6,447]] 以及另一个列表,其中包含上表第二列的值,其中数字按升序排列 lst = [447,4755,9695] 我正在尝试打印lst中的值,因为它已经按升序排列了,但不只是打印出这样的值: 447 4755 9695 我还希望将表格第一列的值与它一起打印: No: 6 Total distance travelled: 447 No: 2 Total distance travelled
table = [[1, 9695],[2, 4755],[6,447]]
以及另一个列表,其中包含上表第二列的值,其中数字按升序排列
lst = [447,4755,9695]
我正在尝试打印lst中的值,因为它已经按升序排列了,但不只是打印出这样的值:
447
4755
9695
我还希望将表格第一列的值与它一起打印:
No: 6 Total distance travelled: 447
No: 2 Total distance travelled: 4755
No: 1 Total distance travelled: 9695
我试过这样的方法:
n = len(lst)
for i in range(n):
if table[i][1] == lst[i]:
print("No: " + str(table[i][0]) + " " + "Total distance
travelled: " + str(lst[i]))
但它只是打印出某些值,而不是全部值。我希望能在这方面得到一些帮助请注意,我不建议使用任何内置函数,如lambda等,只建议使用与我编写的类似的函数 使用字典是一种解决方案:
table = [[1, 9695],[2, 4755],[6,447]]
lst = [447,4755,9695]
d = {v: k for k, v in table}
for i in lst:
print('No: {0} Total distance travelled: {1}'.format(d[i], i))
# No: 6 Total distance travelled: 447
# No: 2 Total distance travelled: 4755
# No: 1 Total distance travelled: 9695
这里您要问的根本问题是:
if table[i][1] == lst[i]:
您并不是检查每个表条目,而是检查与当前列表条目具有相同索引的条目。因此,对于447
而言,您只需检查[19695]
是否匹配447
,而它不匹配
如果你真的想这样做,你需要另一个循环:
for i in range(n):
for j in range(n):
if table[j][1] == lst[i]:
有很多方法可以改进这一点,只需将用于lst中的条目:
而不是用于范围(n)
中的i,然后lst[i]
,并将表
替换为dict
,而不是列表
,依此类推
此外,您还需要修复代码中至少一个其他错误
但这将使你所问的关于工作的部分,以一种你希望能理解的方式。可以是一本字典,也可以是一个简单的列表:
table = [[1, 9695],[2, 4755],[6,447]]
lst = [447,4755,9695]
table_sorted = sorted(table, key=lambda alist: alist[1])
for x in table_sorted:
print('{0} ... {1}'.format(x[0], x[1]))
创建一个包含
表[n][1]
值的“临时”列表,并将其与索引一起使用以查找lst
值
for i in range(len(lst)):
print ('No %d Distance %4d' % (table[[x[1] for x in table].index(lst[i])][0], table[[x[1] for x in table].index(lst[i])][1]))
输出:
[[6, 447], [2, 4755], [1, 9695]]
No: 6 Total distance travelled: 447
No: 2 Total distance travelled: 4755
No: 1 Total distance travelled: 9695
6号距离447
2号距离4755
1号距离9695
效率不高,因为它会为每行重新创建两次重新排序的列表,但您可能可以创建一个临时列表来存储它:
l = [x[1] for x in table]
for i in range(len(lst)):
print ('No %d distance %4d' % (table[l.index(lst[i])][0],table[l.index(lst[i])][1]))
(输出相同。)您不需要列表。您可以根据需要对表进行排序
from operator import itemgetter
table = [[1, 9695],[2, 4755],[6,447]]
sorted_list = sorted(table, key=itemgetter(1))
print(sorted_list)
输出:
[[6, 447], [2, 4755], [1, 9695]]
No: 6 Total distance travelled: 447
No: 2 Total distance travelled: 4755
No: 1 Total distance travelled: 9695
问题很简单:
for item in sorted_list:
print("No: " + str(item[0]) + " Total distance travelled: " + str(item[1]))
输出:
[[6, 447], [2, 4755], [1, 9695]]
No: 6 Total distance travelled: 447
No: 2 Total distance travelled: 4755
No: 1 Total distance travelled: 9695
lambda
不是内置函数,它是一种创建自己函数的方法。这一要求就像是说“不要使用任何内置函数,如for
或=
”。如果你的老师真的这么说,他们对Python的理解还不够好,无法教授它。如果你的老师真的告诉了你一些更明智的事情,那么你需要更加注意。你可以把表格
转换成字典吗?(我想不会;但如果可以的话,答案很简单。)@Maxxx、len
、range
都是内置的,正如发布的那样,代码甚至不会编译;打印语句中有一个语法错误。请给我们一个你的错误的真实、有效的例子。(见附件)