2 回答
![?](http://img1.sycdn.imooc.com/545861b80001d27c02200220-100-100.jpg)
TA贡献1851条经验 获得超3个赞
假设您想要旋转list2以使“共享”元素位于与 中相同的位置list1。
首先,要获得匹配的索引,您不必比较所有元素。相反,您可以使用字典来存储哪个元素位于哪个位置,然后在一次传递中获取匹配位置list2(如果列表始终只有 3 个元素,这并不重要,但对于较长的列表,它会降低复杂性O(n²) 至 O(n))
list1 = [26, 45, 15]
list2 = [13, 15, 20]
pos2 = {x: i for i, x in enumerate(list2)}
p1, p2 = next((i, pos2[x]) for i, x in enumerate(list1) if x in pos2)
然后,当索引大于列表的长度时,您可以使用列表理解来list2使用模数“环绕”来获取“旋转”元素。%
n = len(list2)
res = [list2[(i+p2-p1) % n] for i in range(n)]
print(res) # [20, 13, 15]
![?](http://img1.sycdn.imooc.com/54585050000156a302200220-100-100.jpg)
TA贡献1998条经验 获得超6个赞
此代码获取 list1 中也存在于 list2 中的数字的值和索引。
list1 = [26, 45, 15]
list2 = [13, 15, 20]
index, number = next((idx,number) for idx, number in enumerate(list1) if number in list2)
然后它从 list2 中删除该数字并将其再次插入到所需的索引处:
list2.remove(number)
list2.insert(index,number)
print(list2)
输出将是
[13, 20, 15]
添加回答
举报