python 小题

[6,2,11,1,4,9,5,7,8,20]将所有比6小的数字放到它的左边,大的放到6的右边。

list1 = [6,2,11,1,4,9,5,7,8,20]

# 方法1

通过三目运算来进行重新拼接,返回新的列表

[i for i in list1 if i < 6] + [j for j in list1 if j >6]

# 方法2

在原列表中进行重组

list1 = [6,2,11,1,4,9,5,7,8,20]
for i in range(len(list1)):
    if list1[i]<6:
        list1.insert(0,list1.pop(i))  # 虽然列表在变化,但是未处理的数据并没有移位,insert只是处理了前面段,未处理部分还是可以遍历完

>>> for i in range(len(list1)):
... print(list1[i])
... print(list1)
... if list1[i]<6:
... list1.insert(0,list1.pop(i))
...
6
[6, 2, 11, 1, 4, 9, 5, 7, 8, 20]
2
[6, 2, 11, 1, 4, 9, 5, 7, 8, 20]
11
[2, 6, 11, 1, 4, 9, 5, 7, 8, 20] 
1
[2, 6, 11, 1, 4, 9, 5, 7, 8, 20] 
4
[1, 2, 6, 11, 4, 9, 5, 7, 8, 20] # 比如说在处理 ‘1’ 的时候,虽然把 1 的位子改变了,但是后面的还没处理数据的位置都没影响到,在遍历的时候就不会缺少
9
[4, 1, 2, 6, 11, 9, 5, 7, 8, 20]
5
[4, 1, 2, 6, 11, 9, 5, 7, 8, 20]
7
[5, 4, 1, 2, 6, 11, 9, 7, 8, 20]
8
[5, 4, 1, 2, 6, 11, 9, 7, 8, 20]
20
[5, 4, 1, 2, 6, 11, 9, 7, 8, 20]

猜你喜欢

转载自www.cnblogs.com/su-sir/p/11795293.html