Python 在问答频道中刷题积累到的小技巧(七)

简介: Python 在问答频道中刷题积累到的小技巧(七)

1. max(),min()函数的key参数应用

快速找出众数

>>> import random
>>> r = [rnd(1,9) for _ in range(20)]
>>> r
[3, 3, 5, 9, 1, 7, 4, 1, 1, 9, 6, 8, 3, 9, 8, 8, 6, 4, 6, 6]
>>> max(r, key=r.count)
6



找最短密码(首个匹配到的):

>>> from random import choices, randint as rnd
>>> s = ''.join((map(chr,[*range(ord('A'),ord('Z')+1),*range(ord('a'),ord('z')+1),*range(ord('0'),ord('9')+1),ord('-')])))
>>> p = [''.join(choices(s,k=rnd(3,10))) for _ in range(10)]
>>> p
['fiKYKBl', 'HZjwZUGg', 'pUaKkKtrE8', '2qet35e1Q', 'is34n11F', 'Jxed96', '9K8TOE', 'sqymdfx', 'SRjuq', 'J9TBu']
>>> min(p, key=lambda x:len(x))
'SRjuq'


位数最多、最少的整数 :(首个匹配到的数,与最大值、最小值未必相等)

>>> from random import choices, randint as rnd
>>> n = [int(''.join(map(str,choices(range(10),k=rnd(3,10))))) for _ in range(10)]
>>> n
[9345447, 1030757133, 8630, 293949, 497, 1206340275, 172, 950651, 983, 138]
>>> max(n, key=lambda x:len(str(x)))
1030757133
>>> min(n, key=lambda x:len(str(x)))
497
>>>
>>> max(n)
1206340275
>>> min(n)
138


2. 列表任意指定长度的分组

def splitlist(lst,*group):
    res,lst = [],lst[:]
    for i in group:
        t = []
        for _ in range(i):
            if lst: t.append(lst.pop(0))
            else: break
        if t: res.append(t)
    if lst: res.append(lst)
    return res
a = [1,2,3,4,5,6,7,10,11,12,20,21,23]
print(splitlist(a,8,4,2,1))
# [[1, 2, 3, 4, 5, 6, 7, 10], [11, 12, 20, 21], [23]]
print(splitlist(a,7,3,2,1))
# [[1, 2, 3, 4, 5, 6, 7], [10, 11, 12], [20, 21], [23]]
print(splitlist(a,7,3,2,2))
# [[1, 2, 3, 4, 5, 6, 7], [10, 11, 12], [20, 21], [23]]
print(splitlist(a,7,3,2))
# [[1, 2, 3, 4, 5, 6, 7], [10, 11, 12], [20, 21], [23]]
print(splitlist(a,7,3))
# [[1, 2, 3, 4, 5, 6, 7], [10, 11, 12], [20, 21, 23]]
print(splitlist(a,7,2,2,5))
# [[1, 2, 3, 4, 5, 6, 7], [10, 11], [12, 20], [21, 23]]


3. 用numpy解多元一次方程组

import numpy as np
A = [[1,-2,1],[0,2,-8],[-4,5,9]]     # 系数矩阵
B = [0,8,-9]                         # 常数矩阵
x,y,z = np.linalg.inv(A).dot(B)      # 求方程组的解
print(f'x={x}, y={y}, z={z}')        # 默认它有且只有一组解,不展开讨论



4. 应用字典同时返回两数的和差积商余

def exp(a,b):
    choice = {  1: lambda x, y: x + y,
            2: lambda x, y: x - y,
            3: lambda x, y: x * y,
            4: lambda x, y: x // y,
            5: lambda x, y: x % y }
    return tuple(choice[i+1](a,b) for i in range(5))
print(exp(8,3))     # (11, 5, 24, 2, 2)
print(exp(5,6)[2])  # 30



5. 多种方法取出某字母开头的元素

>>> s = ['foot','head','Face','Hair','nose','Mouth','finger','ear']
>>> [w for w in s if w[0].lower()=='f']
['foot', 'Face', 'finger']
>>> [w for w in s if w[0] in ('f','F')]
['foot', 'Face', 'finger']
>>> [w for w in s if w.startswith(('F','f'))]
['foot', 'Face', 'finger']


6. 输入一个整数,输错不会异常退出

1. n = ''
2. while not n.isnumeric(): n = input('输入一个非负整数:')
3. n = int(n)
n = ''
while not (n.isnumeric() or len(n) and n[0]=='-' and n[1:].isnumeric()):
    n = input('输入一个整数:')
n = int(n)
目录
相关文章
|
3月前
|
存储 索引 Python
Python小技巧:单下划线 '_' 原创
Python小技巧:单下划线 '_' 原创
71 3
|
4月前
|
搜索推荐 索引 Python
【Leetcode刷题Python】牛客. 数组中未出现的最小正整数
本文介绍了牛客网题目"数组中未出现的最小正整数"的解法,提供了一种满足O(n)时间复杂度和O(1)空间复杂度要求的原地排序算法,并给出了Python实现代码。
120 2
|
2月前
|
搜索推荐 Python
Leecode 101刷题笔记之第五章:和你一起你轻松刷题(Python)
这篇文章是关于LeetCode第101章的刷题笔记,涵盖了多种排序算法的Python实现和两个中等难度的编程练习题的解法。
23 3
|
3月前
|
开发工具 git Python
Python小技巧:满意的逗号放置
Python小技巧:满意的逗号放置
19 4
|
3月前
|
开发者 索引 Python
7个提升python编程的小技巧
7个提升python编程的小技巧
42 0
7个提升python编程的小技巧
|
2月前
|
算法 C++ Python
Leecode 101刷题笔记之第四章:和你一起你轻松刷题(Python)
这篇博客是关于LeetCode上使用Python语言解决二分查找问题的刷题笔记,涵盖了从基础到进阶难度的多个题目及其解法。
18 0
|
2月前
|
算法 C++ Python
Leecode 101刷题笔记之第三章:和你一起你轻松刷题(Python)
本文是关于LeetCode算法题的刷题笔记,主要介绍了使用双指针技术解决的一系列算法问题,包括Two Sum II、Merge Sorted Array、Linked List Cycle II等,并提供了详细的题解和Python代码实现。
15 0
|
2月前
|
算法 C++ 索引
Leecode 101刷题笔记之第二章:和你一起你轻松刷题(Python)
本文是关于LeetCode 101刷题笔记的第二章,主要介绍了使用Python解决贪心算法题目的方法和实例。
11 0
|
3月前
|
存储 索引 Python
Python小技巧:单下划线 ‘_‘
Python小技巧:单下划线 ‘_‘
14 0
|
3月前
|
SQL 关系型数据库 MySQL
Python小技巧——将CSV文件导入到MySQL数据库
Python小技巧——将CSV文件导入到MySQL数据库
86 0