START -


使用四种方法,交换a和b的值 

   方法一:通过添加中间变量

这应该是我们最先想到且常用的方法。

temp = a a = b b = temp
temp = a 
a = b 
b = temp

  方法二:pythonic的写法

直接将a, b两个变量放到元组中,再通过元组按照index进行赋值的方式进行重新赋值给两个变量。

a, b = b, a
a, b = b, a

  方法三:运用数学技巧

a = a+bb = a-ba = a-b
a = a+b
b = a-b
a = a-b

  方法四:运用异或运算

异或运算的基本原理为:

1^1=01^0=10^0=0
1^1=0
1^0=1
0^0=0

那么用在值交换的场景中就是:

a = a^bb = a^ba = a^b
a = a^b
b = a^b
a = a^b

如何跳出两个for循环

我们都知道,在循环里使用break可以跳出循环,但是如果我们想要在满足某个条件时,跳出两层循环,一个break是不够,它只会跳出子循环,外层循环会继续运行。例如:

for i in range(5):    for j in range(10):        print(i, j)        if i == 3 and j == 3: #满足条件时,只会跳出j的循环,外部i的循环会继续            break
for i in range(5):
    for j in range(10):
        print(i, j)
        if i == 3 and j == 3: #满足条件时,只会跳出j的循环,外部i的循环会继续
            break

那么如何让这个循环满足条件时干净利落地跳出两层循环呢?

  通过添加一个flag

这也是我经常用的一个方法,通过添加一个flag标志来判断是否要跳出外层循环。

flag = Falsefor i in range(5):    for j in range(10):        print(i, j)        if i == 3 and j == 3:            flag = True            break    if flag:        break
flag = False
for i in range(5):
    for j in range(10):
        print(i, j)
        if i == 3 and j == 3:
            flag = True
            break
    if flag:
        break

该方法需要两个break,第二个break是否执行取决于flag是否为True。

  pythonic的写法

使用for else语法。只有在循环正常结束的时候,才会执行else里的语句,如果当次循环执行了break,那么else就不会执行。

for i in range(5):    for j in range(10):        print(i, j)        if i == 3 and j == 3:            break    else:        continue  break
for i in range(5):
    for j in range(10):
        print(i, j)
        if i == 3 and j == 3:
            break
    else:
        continue
  break

注意,这里的else对应的是最外层的for循环。

删除list中的重复元素 

  使用set

set集合可以帮助对list进行去重操作,可以在最外层再套上一个list再转换回list形式。

a = [1,2,3,3,4,5,1,2]a = list(set(a))
a = [1,2,3,3,4,5,1,2]
a = list(set(a))

  使用字典函数

b = b.fromkeys(a)c = list(b.keys())
b = b.fromkeys(a)
c = list(b.keys())

对字典按照value进行排序

a = {'a':2, 'b':3, 'c':1}a = sorted(a.items(), key=lambda x:x[1], reverse=True)
a = {'a':2, 'b':3, 'c':1}
a = sorted(a.items(), key=lambda x:x[1], reverse=True)

reverse参数为True的话,是按照从大到小进行排序,否则是从小到大(默认)。返回的是一个tuple的list,可以在最外层添加dict转换回字典 dict(a)

对字典进行合并

a = {'a':1}b = {'b':2}c = {'c':3}
a = {'a':1}
b = {'b':2}
c = {'c':3}

  使用update

a.update(b)a.update(c)
a.update(c)

  pythonic的方式

{**a,**b,**c}
{**a,**b,**c}

- END -