Maison  >  Article  >  développement back-end  >  Comment insérer rapidement des variables dans un tableau trié en utilisant Python ?

Comment insérer rapidement des variables dans un tableau trié en utilisant Python ?

WBOY
WBOYavant
2023-05-09 22:49:201312parcourir

Utilisez sort et sorted pour trier

Modifiez et générez de nouvelles variables sur place

Dans le processus d'apprentissage de python, la fonction de tri rapide de la liste est un cours obligatoire pour nous. Pour présenter une méthode d'insertion rapide d'une séquence ordonnée, examinons d'abord les différences et les liens entre les deux fonctions de tri. Regardons d'abord sort(), veuillez regarder le code suivant :

import random
# 随机生成10个100以内的整数
example_list = [random.randint(1,100) for i in range(10)]
# 对他们进行排序
example_list.sort()
print(example_list)

>>> [22, 28, 35, 47, 49, 55, 68, 79, 87, 98]

Il convient de noter que la fonction **sort()** ici n'a aucune valeur de retour, mais effectue un tri sur place, s'il vous plaît regardez le code ci-dessous :

import random
example_list = [random.randint(1,100) for i in range(10)]
example_list_sort_test = example_list.sort()
print(example_list_sort_test)

>>> None

Lorsque nous utilisons une nouvelle variable pour recevoir le contenu trié, nous constatons que nous obtenons Aucun. Mais **sorted()** est tout le contraire. Il générera une nouvelle variable pour stocker la liste triée. Veuillez regarder le code suivant :

import random
example_list = [random.randint(1,100) for i in range(10)]
example_list_sorted_test = sorted(example_list)
print(example_list_sorted_test)

>>> [6, 14, 14, 20, 28, 50, 58, 58, 71, 83]

Comme vous pouvez le voir, nous utilisons **sorted()** pour. tri A ce moment, un nouveau stockage variable est généré et obtenu par nos soins.

Paramètres couramment utilisés

Bien sûr, les paramètres utilisés par les deux fonctions de tri ont en grande partie le même contenu. Regardons l'exemple suivant :

import random # 导入 random 模块,用于生成随机数

# 创建一个包含 10 个随机整数的列表,每个数的范围在 1 到 100 之间
example_list_argTest = [random.randint(1, 100) for i in range(10)]

# 将列表按升序排序并打印输出
example_list_argTest.sort()
print(example_list_argTest)

# 将列表按降序排序并打印输出
example_list_argTest.sort(reverse=True)
print(example_list_argTest)

# 创建一个包含三个子列表的列表
example_list_argTest_02 = [[5, 7], [1, 8], [9, 6]]
print(example_list_argTest_02)

# 对子列表按第一个元素排序并打印输出
example_list_argTest_02.sort()
print(example_list_argTest_02)

# 对子列表按第二个元素排序并打印输出
def takeSecond(test_list):
    return test_list[1]

example_list_argTest_02.sort(key=takeSecond)
print(example_list_argTest_02)

# 创建一个包含四个字符串的列表
example_list_argTest_03 = ['apple', 'big apple', 'pear', 'hen']
print(example_list_argTest_03)

# 对字符串按长度排序并打印输出
example_list_argTest_03.sort(key=len)
print(example_list_argTest_03)

>>>[4, 18, 26, 41, 43, 52, 77, 77, 97, 98]
>>>[98, 97, 77, 77, 52, 43, 41, 26, 18, 4]
>>>[[5, 7], [1, 8], [9, 6]]
>>>[[1, 8], [5, 7], [9, 6]]
>>>[[9, 6], [5, 7], [1, 8]]
>>>['apple', 'big apple', 'pear', 'hen']
>>>['hen', 'pear', 'apple', 'big apple']

Parmi eux, les paramètres de la fonction **sorted()** sont. la même chose. Les éléments suivants sont couramment utilisés La valeur du paramètre et la signification du paramètre :

  • clé : Le paramètre peut accepter une fonction comme paramètre, qui sera appliquée à chaque élément de la liste pour le tri. Cette fonction doit accepter un paramètre et renvoyer la valeur à utiliser pour le tri.

  • reverse : Un paramètre facultatif utilisé pour contrôler l'ordre dans lequel la liste est triée. Lorsque reverse est True, la liste est triée par ordre décroissant ; lorsque reverse est False ou n'est pas spécifié (la valeur par défaut est False), la liste est triée par ordre croissant.

Utilisez la bisecte pour insérer des variables dans une séquence ordonnée

Obtenez la position de l'élément inséré

la bisecte est utilisée pour insérer des éléments dans une liste triée et renvoyer l'index de la liste après avoir inséré l'élément. Il existe deux fonctions disponibles, à savoir bisect_left() et bisect_right() Évidemment, la principale différence est que l'une renverra l'index du côté gauche de l'insertion, et l'autre renverra l'index du côté droit. de l'insertion. Veuillez regarder l'exemple suivant :

import bisect

example_list = [random.randint(1,100) for i in range(10)]
example_list.sort()
print(example_list)

left_index = bisect.bisect_left(example_list_sorted_test,58)
print(left_index)

right_index = bisect.bisect_right(example_list_sorted_test,58)
print(right_index)

>>>[9, 11, 16, 22, 40, 59, 60, 68, 83, 99]
>>>6
>>>8

De plus, les deux fonctions ci-dessus ont également deux paramètres facultatifs, comme suit :

  • le paramètre lo représente la position de départ de la plage de recherche, qui peut être utilisée pour spécifier dans la liste Rechercher dans les sous-gammes. Le paramètre

  • hi représente la position finale de la plage de recherche et peut être utilisé pour spécifier une recherche dans une sous-plage de la liste.

Nous pouvons utiliser les paramètres ci-dessus pour sélectionner une partie de l'intervalle à insérer, veuillez consulter l'exemple suivant :

test_list = list(range(10))
print(test_list)
# 指定区间搜索插入
bisect.bisect_left(test_list, 2, 3, 5)

>>>[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>>3

Dans cet exemple, nous spécifions l'insertion de l'intervalle de recherche et renvoyons la position de l'index d'insertion.

Utilisez insort pour insérer des éléments dans une séquence ordonnée

Si vous souhaitez insérer des éléments dans une liste sans détruire son ordre de tri, vous pouvez utiliser la fonction **insort()**. Veuillez regarder l'exemple simple ci-dessous :

import bisect

sorted_list_example = [1, 3, 4, 6, 8, 9, 11]
bisect.insort(sorted_list_example, 7)
print(sorted_list_example )

>>> [1, 3, 4, 6, 7, 8, 9, 11]

Dans l'exemple ci-dessus, nous avons inséré la variable personnalisée dans le tableau ordonné.

Un exemple d'application

Supposons que nous voulions évaluer les résultats d'entrée. En fait, cela peut être écrit en utilisant la méthode présentée ci-dessus. Veuillez consulter l'exemple suivant :

def grade(score, breakpoints = [60,70,80,90], grades='FDCBA'):
    index = bisect.bisect(breakpoints, score)
    return grades[index]

random_grades = [random.randint(1,100) for i in range(10)]
print(random_grades)

print([grade(s) for s in random_grades])

>>>[27, 28, 35, 89, 20, 61, 20, 89, 53, 92]
>>>['F', 'F', 'F', 'B', 'F', 'D', 'F', 'B', 'F', 'A']

En utilisant rationnellement la fonction ci-dessus d'insertion de séquence, nous ont rempli Une fonction de notation et renvoie les notes correspondant aux différentes notes.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer