Résumé des connaissances sur le python de la Blue Bridge Cup (détaillé)

Comment python reçoit les données

1、接收一个元素
s = input() #字符串
n = int(input()) #整数

2、接收两个或三个元素(以空格隔开)
n, m = map(int, input().split())
n, m, k = map(int, input().split())

3、将一行元素放入数组中
num = [int(i) for i in input().split()]

4、将数组变为整个字符串
s= "".join(map(str,num))

Méthodes intégrées Python

hex()  将数字转换为十六进制字符串
oct()  将整数转换成八进制字符串               
oct(int("39",16)) >>>'0o71'  十六进制转八进制
chr(number)  返回数字对应的ascii码值
divmod(a,b)  返回(a//b,a%b)

méthodes de chaîne python

s.swapcase() 将字符串中所有字母的大小写都反转
s.upper() 将字符串所有的字母都转换为大写
s.lower() 将字符串所有的字母都转换为小写
s.isdigit() 检查字符串中的字符是否都是数字
s.isnumeric() 检查字符串中的所有字符是否都是数字字符
s.capitalize() 返回字符串的副本,但将第一个字符大写
s.isalpha() 检查字符串中的所有字符是否都是字母
s.isalnum() 检查字符串中的字符是否都是字母或数
s.isspace() 检查字符串中的字符是否都是空白字符

module python

module de statistiques

1、statistics.mean()  求算术平均值
2、statistics.median() 计算数据的中位数,如果有两个中位数,则返回其平均值
   statistics.median_low() 数据中的低中位数
   statistics.median_high() 数据中的高中位数
3、statistics.mode()  计算众数
4、statistics.pvariance() 计算数据的总体方差

module de recouvrement

1、collections.deque([])
        q = collections.deque([1, 2, 3, 4])
        q.rotate(1)
        print(q)  # [4, 1, 2, 3]
        q.rotate(1)
        print(q)  # [3, 4, 1, 2]
2、collections.Counter()
    >>> import collections
    >>> collections.Counter([1,2,3,1,2,3,1,2])
    Counter({
    
    1: 3, 2: 3, 3: 2})

module date-heure

1、日期增加
>>> import datetime
>>> bt = datetime.date(2000,11,6)
>>> print(bt)
2000-11-06
>>> a = datetime.timedelta(days=100)
>>> a
datetime.timedelta(days=100) #weeks / hours
>>> b = a + bt
>>> b
datetime.date(2001, 2, 14)

2. Trouver le jour de la semaine à partir d'une date donnée

bt.weekday():返回weekday,如果是星期一,返回0;如果是星期2,返回1,以此类推;
bt.isoweekday():返回weekday,如果是星期一,返回1;如果是星期2,返回2,以此类推;

3. Normalisation

>>> bt.isoformat()
'2000-11-06'

4. Renvoyez le nombre de jours depuis le début du calendrier grégorien jusqu'au présent

>>> bt.toordinal()
730430

5. Sortie

>>> bt.__format__('%Y/%m/%d')
'2000/11/06'

module de calendrier

    1、判断是否为闰年
    >>> import calendar
    >>> calendar.isleap(2022)
    False

   2、返回两年之间的闰年总数
    >>> calendar.leapdays(2000,2020)

programmation dynamique

Solution approximative

1. Définir la signification des éléments du tableau, comprendre la signification de dp[i] et exprimer les résultats 2.
Découvrir la relation entre les éléments du tableau, c'est-à-dire l'équation de transfert dynamique, formule récursive
3. Trouver la valeur initiale, comme la valeur du premier élément

algorithme de retour en arrière

cadre

ans = []
def trace(path,choices):
    if len(path) == len(nums):
        ans.append(list(path))

    for i in choices:
        if i in path:       
            continue
        path.append(i)
        trace(path,choices)
        path.pop()      
    return ans
nums = [1,2,3]
print(trace([],nums))
>>> [[1, 2, 3], [1, 3, 2], [2, 1, 3], [2, 3, 1], [3, 1, 2], [3, 2, 1]]
res = []  
path = []  
def bt(nums,startIndex):
    res.append(path[:])
    for i in range(startIndex,len(nums)):
        path.append(nums[i])
        bt(nums,i+1)
        path.pop()
nums = [1,2,3]
bt(nums,0)
print(res)
>>> [[], [1], [1, 2], [1, 2, 3], [1, 3], [2], [2, 3], [3]]

Chaîne #9, inversion de liste

s = "123456"
s[::-1]
>>>"654321"

Exemple d'algorithme de retour en arrière # 17 39 40 46 47 77 78 90 1079

Points de connaissance contenus dans les questions simples Lituo (le chiffre devant est le numéro de la question)

#14 fonction énumérer()

用于将一个可遍历的数据对象(如列表、元组或字符串)组合为一个索引序列,同时列出数据和数据下标,一般用在 for 循环当中。
 max()和min(),字符串是可以比较的,按照ascII值排 abb, aba,abac,最大为abb,最小为aba

fonction zip

a = [1,2,3]  b = [4,5,6]
list(zip(a,b))
>>>[(1,4),(2,5),(3,6)]
strs = ["flower","flow","flight"] 
list(zip(*strs))

#17 #46 #47 module itertools

import itertools
   1)product
for i in itertools.product('ab', 'cd'):
    print(i)
>>>('a', 'c')
   ('a', 'd')
   ('b', 'c')
   ('b', 'd')

  2)permutations
    list(itertools.permutations('ABC'))
    >>>[('A', 'B', 'C'), ('A', 'C', 'B'), ('B', 'A', 'C'), ('B', 'C', 'A'), ('C', 'A', 'B'), ('C', 'B', 'A')]
    list(itertools.permutations('ABC', 2))
    >>>[('A', 'B'), ('A', 'C'), ('B', 'A'), ('B', 'C'), ('C', 'A'), ('C', 'B')]

    3)combinations
    list(itertools.combinations("ABC",2))
    >>>[('A', 'B'), ('A', 'C'), ('B', 'C')]

    4)accumulate 可指定函数,默认为求和
    list(itertools.accumulate([0,1,0,1,1,2,3,5]))
    >>>[0, 1, 1, 2, 3, 5, 8, 13]
    list(itertools.accumulate([0,1,0,1,1,2,3,5],max))
    >>>[0, 1, 1, 1, 1, 2, 3, 5]

#20 Lorsque vous recherchez des éléments, envisagez de remplacer la chaîne elements.replace
("()", "")

#27 Lors de la suppression d'un élément, vous pouvez utiliser remove
remove pour supprimer le premier élément de la liste avec la valeur spécifiée tandis que ture

#28 find trouve une sous-chaîne dans une chaîne, s'il est trouvé, renvoie l'index du premier caractère de la chaîne, s'il n'est pas trouvé, renvoie -1
a = "asdfghjkl" b = "jkl"
Algorithme KMP

#49
Utilisation du dictionnaire de regroupement d'anagrammes alphabétiques

strs = ["eat", "tea", "tan", "ate", "nat", "bat"]
res = []
dic = {
    
    }
for s in strs:
    keys = "".join(sorted(s))
    if keys not in dic:
        dic[keys] = [s]
    else:
        dic[keys].append(s)
print(list(dic.values()))
>>>[['eat', 'tea', 'ate'], ['tan', 'nat'], ['bat']]

#50 Fonction d'alimentation

.pow(a,b)

#58 Diviser la chaîne en séquences en fonction des caractères spécifiés s.split(" ")
supprimer les blancs au début et à la fin de la chaîne et renvoyer le résultat supprimé s.strip()

#64 Créer une méthode de liste bidimensionnelle

dp = [[0 for _ in range(n)] for j in range(m)]
dp = [[0] * n for i in range(m)]

#67 Binaire en décimal entier("chaîne binaire", 2)
décimal en binaire bin(entier)[2:]

#88 Supprimer le dernier élément de la liste

list.pop()

#136 Les nombres qui n'apparaissent qu'une seule fois utilisent l'opération XOR

a = 0
for i in nums:
    a = a^i

#191 Binary
bin() renvoie la représentation binaire d'un entier int ou d'un entier long long int.

#231 Nombre binaire de la puissance de 2, un seul bit vaut un

#268 Effectuez des additions et des soustractions de tableaux ou supprimez des éléments en double
La fonction set() crée un ensemble d'éléments non ordonnés et non répétés, qui peut être utilisé pour tester les relations et supprimer les données en double

#367 Trouver des carrés parfaits sans bibliothèque

1、完全平方数是前n个连续奇数的和 1+3+5+7+9++(2n-1)=n^2
2、n ** 0.5 % 1

La fonction de jeu #500 peut être comparée

a = set('qwertyuiop')
b = set("reagdagd")
return b<a

#520 string.islower() #Vérifier que toutes les lettres de la chaîne sont en minuscules
string.isupper() #Vérifier que toutes les lettres de la chaîne sont en majuscules
string.istitle() Vérifier que la chaîne est située après une non-lettre Toutes les lettres sont en majuscules et toutes les autres lettres sont en minuscules / peut détecter si la première lettre de la chaîne est en majuscule

#599 Paires clé-valeur pour les dictionnaires à l'envers

b = {
    
    v:k for k,v in d.items()}
寻找键
for i in d:
    if ans[i] == a:
        l.append(i)

#605 Lorsque vous considérez le problème des limites, vous pouvez ajouter un nombre avant et après le tableau

#645 Lorsque vous recherchez différents éléments dans un tableau continu, vous pouvez utiliser la somme pour trouver

#709 Convertir toutes les lettres de la chaîne en minuscules
s.lower()

#914 Trouver les facteurs communs de tous les nombres du tableau

 while len(ans) != 1:
        ans = sorted(ans)
        c = math.gcd(ans[0],ans[1])
        if c == 1:
            print("1")
        else:
            ans.append(c)
            ans.remove(ans[0])
            ans.remove(ans[0])
    print(ans[0])

#922 Fusion croisée de deux listes

from itertools import chain
list(chain.from_iterable(zip(a, ans)))

[i for n in zip(a, ans) for i in n]

#1154 La date est déterminée comme étant le jour de l'année

time.strptime(date, "%Y-%m-%d")[-2]

#1185 La date confirme le jour de la semaine

datetime.datetime(year,month,day).strftime("%w")

#1207 Trouver le nombre d'occurrences de tous les éléments du tableau

from collections import Counter
arr = [1,2,2,1,1,3]
print(Counter(arr).values())
>>>dict_values([3, 2, 1])
from collections import Counter
arr = [1,2,2,1,1,3]
print(Counter(arr))
>>>Counter({
    
    1: 3, 2: 2, 3: 1})

#1232 N'utilisez pas la division pour la pente de la droite, le diviseur peut être 0, utilisez plutôt la multiplication
y2 / y1 == x2 / x1
x1 * y2 == x2 * y1

#1304 constructeur de liste

[i for i in range(1,n)]

#1323 replace remplace la chaîne spécifiée par une autre chaîne
str.replace(caractère spécifié, caractère cible, nombre de fois non dépassé)

#1331 Vous pouvez utiliser enumerate pour créer un dictionnaire et trouver l'indice en fonction de l'élément

a = sorted(set(arr))
d = {
    
    }
for i, v in enumerate(a, 1):
    d[v] = i

#1337 Les dictionnaires sont triés en fonction de la taille de la valeur

d = sorted(d.items(), key=lambda item:item[1])

#1342 Utiliser while lorsque le nombre de boucles est inconnu

#1346 Détermine si la liste est vide
len() Faites attention au spécial 0, double ou 0

# 1365 Pour trouver un nombre plus petit ou plus grand que le nombre spécifié, vous pouvez d'abord le trier, puis obtenir le nombre de ces nombres par la valeur de l'index

#1380 Le nombre porte-bonheur dans la matrice
obtient les éléments de chaque colonne du tableau à deux dimensions

matrix = [[3,7,8],[9,11,13],[15,16,17]]
colmin = [i for i in zip(*matrix)]
>>>[(3, 9, 15), (7, 11, 16), (8, 13, 17)]

#1556 Séparateur de milliers

print({
    
    :,}.format(n).replace(",","."))
n = 123456
>>>123.456

#1608 bisect.bisect_left(list , i) Trouver la position où la valeur sera insérée et revenir

#1624 string.rfind() trouve la position de la dernière occurrence d'un caractère, renvoie -1 s'il n'y en a pas

#1710 Trier selon une certaine règle

l = [[5,10],[2,5],[4,7],[3,9]]
l = sorted(l, key=lambda x:-x[1])
>>>[[5, 10], [3, 9], [4, 7], [2, 5]]
l = ["adss","a","sad","sd"]
l = sorted(l,key=lambda x:len(x))
>>>['a', 'sd', 'sad', 'adss']

#1863 Trouver tous les sous-ensembles d'une liste donnée

l = [[]]
for x in nums:
    l.extend([i + [x] for i in l])

Accumuler les éléments dans la séquence, par exemple : trouver la somme XOR de tous les éléments

from functools import reduce
j = [1,2,3,4,5]
reduce(lambda x,y:x ^ y,j)

#1880 Renvoie la valeur spécifique d'une seule lettre, vous pouvez d'abord renvoyer son code Unicode

  ord("a")
  >>>97

#1979 Trouver le plus grand commun diviseur de a et b

  gcd(a,b)

#5947 Renvoie une nouvelle collection dont les éléments sont contenus à la fois dans la collection x et dans la collection y

  x.intersection(y)

Découvrez quelques sujets intéressants

Question d'induction mathématique partielle : #6 Transformation en forme de Z#441 Arranger les pièces#1518 Problème de changement de vin #
258 Tout le monde ajoute leetcode-cn.com/problems/set-mismatch/ #461 Distance de Hamming https://leetcode-cn.com/problems/hamming-distance/ (Opération OR exclusive) #246 Numéro central symétrique https://leetcode -cn. com/problems/strobogrammatic-number/ #838 Push dominos https://leetcode-cn.com/problems/push-dominoes/ (remplacement d'élément) #453 Nombre minimum d'opérations pour rendre les éléments du tableau égaux https://leetcode- cn .com/problems/minimum-moves-to-equal-array-elements/ #1002 Trouver des caractères communs https://leetcode-cn.com/problems/find-common-characters/ #657 Le robot peut-il revenir à l'origine https : //leetcode-cn.com/problems/robot-return-to-origin/







#2124 Vérifiez si tous les A sont avant B https://leetcode-cn.com/problems/check-if-all-as-appears-before-all-bs/
#908 Différence minimale I https://leetcode-cn. com/problems/smallest-range-i/
#343 pause entière https://leetcode-cn.com/problems/integer-break/

Utilisation des expressions lambda : #1287 #1122 #1710 #1337

Rappelez-vous l'idée la plus directe :
#5957 Ajouter des espaces aux chaînes https://leetcode-cn.com/problems/adding-spaces-to-a-string/
#1935 Le nombre maximum de mots pouvant être saisis https://leetcode - cn.com/problems/maximum-number-of-words-you-can-type/
#283 Déplacer zéro https://leetcode-cn.com/problems/move-zeroes/
#169 La plupart des éléments https://leetcode - cn.com/problems/majority-element/
#459 Sous-chaîne répétée https://leetcode-cn.com/problems/repeated-substring-pattern/
#2006 Nombre de paires dont la valeur absolue est K https://leetcode-cn .com/problems/count-number-of-pairs-with-absolute-difference-k/

Guess you like

Origin blog.csdn.net/qq_46500711/article/details/124513546