一道有趣的python练习题

请问,这个题目怎么做?

a=[[1,2], [3,4], [5,6], [7,8], [9,0]]
b=[8,7,9,7,9]
其中,
b[0]=8 对应着 a[0]=[1,2]
b[1]=7 对应着 a[0]=[3,4]
b[2]=9 对应着 a[0]=[5,6]
b[3]=7 对应着 a[0]=[7,8]
b[4]=9 对应着 a[0]=[9,0]
把 b 从小到大排序,变成b=[7,7,8,9,9],现在希望原来的b的成员与a的成员之间的对应关系能够保留,也就是同时把a变成
a=[[3,4], [7,8], [1,2], [5,6], [9,0]] ,或者
a=[[7,8], [3,4], [1,2], [5,6], [9,0]] ,或者
a=[[3,4], [7,8], [1,2], [9,0], [5,6]] ,或者
a=[[7,8], [3,4], [1,2], [9,0], [5,6]],
这四个解答里面任何一个都可以。

请问,用最简洁的python语句怎么做?

第一次尝试, 用b给a做个enumerate计数

a=[[1,2], [3,4], [5,6], [7,8], [9,0]]
b=[8,7,9,7,9]
res=zip(b,a)
print(res)#
a1=()
for i in sorted(res):
   a1+=(i,)
print(a1)#((7, [3, 4]), (7, [7, 8]), (8, [1, 2]), (9, [5, 6]), (9, [9, 0]))
l=zip(*a1)
print(l)#
b1=()
for j in l:
   b1+=(j,)
print(b1)#((7, 7, 8, 9, 9), ([3, 4], [7, 8], [1, 2], [5, 6], [9, 0]))
print(b1[1])#([3, 4], [7, 8], [1, 2], [5, 6], [9, 0])

后来有两个FOR循环来取对象,想到用三元表达式

a1=[i for i in sorted(zip(b,a))]#三元表达式
b1=[i[1] for i in a1]
print(b1)#([3, 4], [7, 8], [1, 2], [5, 6], [9, 0])

两行代码就完成了!

你可能感兴趣的:(一道有趣的python练习题)