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