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通过迭代序列并使用前两项的元组来创建一个,例如。("A", "B")作为键和数字,例如。3作为价值。

然后你可以简单地做c[("A", "B")] += 1例如。如果钥匙不在柜台中,它也可以工作,例如。c[("A", "S")] += 1.

您可以从中创建一个列表以使用列表理解来输出它,但我将把它留给您,因为这是家庭作业。

于 2012-07-14T11:50:57.860 回答
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 回答
0

整个事情有点棘手,因为元组是不可变的,这意味着它们无法更改。相反,您必须复制并阅读它们。

如果你真的需要使用元组,这段代码应该可以工作(尽管它可能完全不是最好的解决方案)。但是,此解决方案不会使列表元素保持有序。

否则,jamylak 的解决方案看起来要好得多。

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 回答