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
都是内置的,正如发布的那样,代码甚至不会编译;打印语句中有一个
语法错误。请给我们一个你的错误的真实、有效的例子。(见附件)