1

Bisect 関数を使用して、Python で単純なコレクションの抽象化を作成しています。ここでの問題は、insort 関数を使用してリストにデータを追加すると、関数が None を返すことです。しかし、BISECT.BISECT(lst,ele) を使用すると、関数は必要に応じて要素を挿入できるリストのインデックスとなる値を返します。

# Python program to implement collection abstraction
# using Bisect Algorithm
# The program would add an element into the SORTED LIST"
# which would be the input
# The program would test whether the element is in the collection
# And also, to return the element of the collection if it is there

from bisect import bisect
from bisect import insort_right

the_list = []

def add(lst,ele):

    return insort_right(lst,ele)

#def test(lst,ele)

#def remove(lst,ele):


print("Enter the size of the list:")
N = int(input())

for x in range(N):

    x = input("")    
    the_list.append(x)
    the_list.sort()

print(the_list)

print("Enter the element to be added in the list")
element = input("")

add_element = add(the_list,element)
print("The element is added in collection at location:", add_element)
4

1 に答える 1

1

insortリスト自体を変更するため、値を返しません。一般に、このように副作用を使用するPython関数は、値を返しません。から変更されたリストを返したい場合は、次のaddようにします。

def add(lst, ele):
    insort_right(lst, ele)
    return lst

ただし、返されるリストは渡されたリストと同じであるため、実際には意味がありません。呼び出し元のコンテキストはすでにそのリストにアクセスできるため、返す必要はありません。これを行うのは少し単調です。

于 2012-09-22T12:38:48.790 に答える