Как мне найти 2 кортежа с определенным первым элементом в наборе 2 кортежей? - PullRequest
0 голосов
/ 26 декабря 2018

У меня есть набор пар с типами (str, int).Я найду кортежи, которые содержат конкретную строку, а затем увеличит соответствующее целое число на 1. Я знаю, как найти кортежи в наборе, спрашивая, myTuple in mySet.Но я не знаю, как справиться с такими ситуациями.Я буду признателен за любую помощь.

Вот пример набора:

from sets import Set
up = 2
down = 3
right = 1
left = 2
mySet = Set([("up",up),("down",down),("right",right),("left",left)])

Скажите от mySet Я хочу увеличить вторую пару, где ее первый элемент равен "up", на1, поэтому мне нужно что-то вроде

if ("up",ref) in mySet:
    ref += 1 

Делая это, я хочу увеличить как значение исходной переменной up, так и второй элемент кортежа.

Ответы [ 2 ]

0 голосов
/ 26 декабря 2018

Я бы предложил использовать словарь для ваших целей.Таким образом, переназначение нового счетчика будет более понятным и более легким для интерпретации.Например:

>>> my_set = { 'up': 0, 'down': 0, 'left': 0, 'right': 0 }
>>> my_set['up'] += 1
>>> my_set
{'up': 1, 'down': 0, 'left': 0, 'right': 0}

Как описывает Брайан, кортежи не являются изменяемыми, поэтому каждый раз, когда вы обновляете счетчик, он должен создавать новый счет с обновленным счетчиком.Это может быть использовано для замены старого кортежа.

0 голосов
/ 26 декабря 2018

вы можете использовать метод фильтра, чтобы найти все записи в наборе, где ваше условие, в этом случае первая запись "up" является истинной.

subset = list(filter(lambda x: x[0] == "up", mySet))
for entry in subset:
    mySet.remove(entry)
    newEntry = (entry[0],(entry[1]+1))
    mySet.add(newEntry)
    up +=1 

вы не можете использовать entry+=1, потому что кортежине изменяемые в Python

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...