1

Pythonでタプルのリストを検索する方法を尋ねたかっただけです。

[("A","B",3),("C","D",4),("E","F",5)]

ユーザーが"A", "B":を検索する"A", "B"とします。リストにあるので、インクリメント3.してリストを再度出力します

[("A","B",4),("C","D",4),("E","F",5)] 

ユーザーがを検索する"A", "S"と、プログラムは新しいレコードを作成してデータベースに保存します

[("A","S",1),("A","B",3),("C","D",4),("E","F",5)]
4

3 に答える 3

6

を使用すると、このタスクは簡単になります。collections.Counter

Counter最初に、シーケンスを反復処理し、最初の 2 つの項目のタプルを使用してを作成する必要があります。("A", "B")キーと番号として。3値として。

c[("A", "B")] += 1次に、たとえば簡単に実行できます。キーがまだカウンターにない場合にも機能します。c[("A", "S")] += 1.

これからリストを作成して、リスト内包表記を使用して出力することもできますが、これは宿題なのでお任せします。

于 2012-07-14T11:50:57.860 に答える
0

タプルは不変であり、変更できないため、すべてが少し注意が必要です。代わりに、それらをコピーして再読み込みする必要があります。

本当にタプルを使用する必要がある場合は、このコードが機能するはずです (ただし、これはおそらく最適なソリューションではありません)。ただし、この解決策では、リスト要素の順序が維持されません。

それ以外の場合は、jamyak のソリューションの方が優れているように見えます。

def search_and_inc_list(tuple_list, search_tuple):
    found = False

    for index, element in enumerate(tuple_list):
        last_index = len(search_tuple)
        if element[0:last_index] == search_tuple:
            new_element = element[0:last_index] + (element[last_index]+1,)
            found = True

            tuple_list[index] = new_element

            # You may add break here if elements are unique

    if found == False:
        new_tuple = search_tuple + (1,)
        tuple_list.append(new_tuple)


mylist = [("A","B",3),("C","D",4),("E","F",5)]
print(mylist)
search_and_inc_list(mylist, ("A", "B"))
print(mylist)
search_and_inc_list(mylist, ("A", "C"))

# [('A', 'B', 3), ('C', 'D', 4), ('E', 'F', 5)]
# [('A', 'B', 4), ('C', 'D', 4), ('E', 'F', 5)]
# [('A', 'B', 4), ('C', 'D', 4), ('E', 'F', 5), ('A', 'C', 1)]
于 2012-07-14T11:55:05.180 に答える
0
lis=[["A","B",3],["C","D",4],["E","F",5]]

def search_and_increment(local_list,search):
    for x in local_list:
        if search in ",".join(x[:-1]):
            x[-1]+=1
            return
    else:
        local_list.append(search.split(",")+[1])
        return

出力:

>>> search_and_increment(lis,"A,B")
>>> lis
[['A', 'B', 4], ['C', 'D', 4], ['E', 'F', 5]]
>>> search_and_increment(lis,"A,S")
>>> lis
[['A', 'B', 4], ['C', 'D', 4], ['E', 'F', 5], ['A', 'S', 1]]
>>> search_and_increment(lis,"A,S")
>>> lis
[['A', 'B', 4], ['C', 'D', 4], ['E', 'F', 5], ['A', 'S', 2]]
>>> search_and_increment(lis,"E,F")
>>> lis
[['A', 'B', 4], ['C', 'D', 4], ['E', 'F', 6], ['A', 'S', 2]]
于 2012-07-14T11:53:03.143 に答える