必须掌握的Python技巧(二)

1、统计元音的个数,在字符串中找aeiou(正则)

import re
def count_vowels(str):
    return len(re.findall(r'[aeiou]', str, re.IGNORECASE))
v1 = count_vowels('basketball')
v2 = count_vowels('music')
print(v1, v2, sep='\n')

11


2、首字母大小写:切片的方法

大写:用字符串的title()方法
def decapitalize(string):
    return string[:1].lower() + string[1:]
v1 = decapitalize('Wonderful')
v2 = 'hello'.title()
print(v1, v2, sep='\n')

22


3、展开列表

  • 用递归的方式将列表的嵌套展开为一个个单列表
  • 如果列表中有其他类型,如元组的话,会当成一个单元素来处理
# 处理列表
def spread(arg):
    ret = []
    for i in arg:
        if isinstance(i, list):
            ret.extend(i)
        else:
            ret.append(i)
    return ret
# 将处理结果添加进新列表中
def deep_flatten(lst):
    result = []
    result.extend(
    spread(list(map(lambda x: deep_flatten(x) if type(x) == list else x, lst)))
    )
    return result
v1 = deep_flatten([1, [2], [[3], 4], 5,[[13,14,520],(9,4,2,0)]])
print(v1)

33


4、求列表的差

  • 该方法将返回第一个列表的元素,其不在第二个列表内的元素,简单说就是a列表独有的;
    如果同时要返回第二个列表独有的元素,还需要加一句 set_b.difference(set_a)。
# A列表独有的元素
def differenceA(a, b):
    set_a = set(a)
    set_b = set(b)
    comparisonA = set_a.difference(set_b)
    return list(comparisonA)
# B列表独有的元素
def differenceB(a, b):
    set_a = set(a)
    set_b = set(b)
    comparisonB = set_b.difference(set_a)
    return list(comparisonB)
v1 = differenceA([1,2,3], [1,2,4])
v2 = differenceB([1,3,1,4],[5,2,0])
print(v1, v2, sep='\n')

44


5、通过函数取差

  • 一个给定的函数,两组数据,返回这个函数两组数据传入后运行结果有差别的列表元素
    以下的给定函数是floor与lambda v : v[‘x’]匿名取键函数
def difference_by(a, b, fn):
    b = set(map(fn, b))
    return [item for item in a if fn(item) not in b]
from math import floor
v1 = difference_by([2.1, 2.3], [3.4],floor)
v2 = difference_by([{'x': 2}, {'x': 1}], [{'x': 1}], lambda v : v['x'])
print(v1, v2, sep='\n')

55


6、链式函数调用:在一行代码内调用多个函数

def add(a, b):
    return a + b
def subtract(a, b):
    return a - b
a, b = 4, 5
v1 = (subtract if a > b else add)(a, b)
# a>b不满足,所以用else的add函数
print(v1)

66


7、检查重复项:检查两个列表是否有重复项

def has_duplicates(lst):
    return len(lst) != len(set(lst))
x = [1,2,3,4,5,5]
y = [1,2,3,4,5]
v1 = has_duplicates(x)
v2 = has_duplicates(y)
print(v1, v2, sep='\n')

77

猜你喜欢

转载自blog.csdn.net/Viewinfinitely/article/details/108029268