按元素打印列表,并通过列表列表进行映射

时间:2018-03-09 00:15:46

标签: 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: 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 等,但只是类似于我写的内容。

5 个答案:

答案 0 :(得分:1)

创建包含table[n][1]值的“临时”列表,并将其与index一起使用以查找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]))

输出:

No 6 Distance  447
No 2 Distance 4755
No 1 Distance 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]))

(相同的输出。)

答案 1 :(得分:0)

使用字典是一种解决方案:

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

答案 2 :(得分:0)

你在这里问的根本问题是:

if table[i][1] == lst[i]:    

您没有检查每个表条目,您只是检查碰巧与当前列表条目具有相同索引的那个。因此,对于447,您只需检查[1, 9695]是否与447匹配,而不是for i in range(n): for j in range(n): if table[j][1] == lst[i]:

如果你真的想以这种方式做事,你需要另一个循环:

for entry in lst:

有很多方法可以改善这一点 - 只需使用for i in range(n)代替lst[i]然后使用table,然后将dict替换为list代替一个#picture { position: absolute; } #container { width: 750px; height: 100px; } ,等等。

此外,您还需要在代码中修复至少一个其他错误。

但是,这将使你能够以一种你可以理解的方式提出关于工作的部分。

答案 3 :(得分:0)

字典或只是简单地对列表进行排序:

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]))

答案 4 :(得分:0)

您不需要该列表。您可以根据需要使用itemgetter对表进行排序。

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]]

简单地说:

for item in sorted_list:
    print("No: " + str(item[0]) + " Total distance travelled: " + str(item[1]))

输出:

No: 6 Total distance travelled: 447
No: 2 Total distance travelled: 4755
No: 1 Total distance travelled: 9695