ホームページ  >  記事  >  バックエンド開発  >  Python を使用してソートされた配列に変数を高速に挿入するにはどうすればよいですか?

Python を使用してソートされた配列に変数を高速に挿入するにはどうすればよいですか?

WBOY
WBOY転載
2023-05-09 22:49:201315ブラウズ

ソートとソートソートの使用

その場で新しい変数を変更して生成する

Python を学習する過程で、リストのクイックソート機能は必須のコースです。順序付けられたシーケンスをすばやく挿入する方法を紹介するために、まず 2 つの並べ替え関数の違いと関連性を見てみましょう。まず sort() を見てみましょう。次のコードを見てください:

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]

ここでの **sort()** 関数には戻り値がないことに注意してください。ただし、インプレース並べ替えを実行する場合は、次のコードを参照してください。

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

新しい変数を使用して並べ替えられたコンテンツを受け取ると、None が返されることがわかります。しかし、**sorted()** はその逆です。ソートされたリストを保存するための新しい変数が生成されます。次のコードを参照してください:

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]

ご覧のとおり、**sorted() を使用しています。 **ソートの際、新しい変数ストレージが生成され、弊社によって取得されます。

一般的に使用されるパラメータ

もちろん、2 つの並べ替え関数で使用されるパラメータには同じ内容が多くあります。次の例を見てみましょう:

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

その中, **sorted() **関数パラメータは同じです。一般的に使用されるパラメータ値とその意味は次のとおりです:

  • key: パラメータは関数をリストに適用されるパラメータ、並べ替える各要素。この関数は 1 つのパラメータを受け入れ、並べ替えに使用される値を返す必要があります。

  • reverse: リストの並べ替え順序を制御するために使用されるオプションのパラメーター。 reverse が True の場合、リストは降順でソートされ、reverse が False または指定されていない場合 (デフォルトは False)、リストは昇順でソートされます。

bisect を使用して、順序付けされたシーケンスに変数を挿入します。

挿入された要素の位置を取得します。

bisect は、並べ替えられたリストに要素を挿入するために使用されます。 、要素を挿入した後、リストにインデックスを返します。使用可能な関数は 2 つあり、bisect_left()bisect_right() です。明らかに、主な違いは、1 つは左挿入のインデックスを返し、もう 1 つはインデックスを返すことです。右のインサートのインデックス。次の例を見てください:

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

さらに、上記 2 つの関数には次の 2 つのオプションのパラメータもあります:

  • lo パラメータは検索を示します。 range 開始位置を使用して、リストのサブ範囲内の検索を指定できます。

  • hi パラメータは検索範囲の終了位置を示し、リストのサブ範囲での検索を指定するために使用できます。

上記のパラメータを使用して、挿入する間隔の一部を選択できます。次の例を参照してください:

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

この例では、検索間隔を指定します。挿入し、挿入されたインデックス位置を返します。

insort を使用して順序付けされたシーケンスに要素を挿入する

並べ替え順序を壊さずにリストに要素を挿入したい場合は、**insort()** 関数を使用できます。次の簡単な例を見てください:

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]

上の例では、順序付けられた配列にカスタム変数を挿入しました。

応用例

入力結果を評価したいとします。実際には、上で紹介した方法を使用して記述できます。次の例を参照してください:

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

合格 上記の関数を適切に使用してシーケンスを挿入すると、パフォーマンス評価関数が完了し、さまざまなグレードに対応する評価が返されました。

以上がPython を使用してソートされた配列に変数を高速に挿入するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はyisu.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。