Python - Создание функции, которая проверяет наличие новых элементов в списках списка - PullRequest
1 голос
/ 30 марта 2020

Я совершенно не понимаю, как создать функцию, которая проверяет подсписки в списке и проверяет, есть ли у этих подсписков уникальный элемент в самом списке.

alphabet_1 = [['a', 'b', 'c'], ['a', 'c', 'd'], ['a', 'e', 'f',], ['a', 'b', 'c']]

alphabet_2 = [['a', 'b', 'c'], ['a', 'b', 'c']

Это всего лишь примеры.

Для алфавита_1, поскольку у второго подсписка есть по крайней мере один новый элемент во всем списке, он переходит к следующему подсписку, а затем к следующему, который завершается ошибкой, поскольку у четвертого подсписка нет новых элементов во всем списке, он останавливается. Затем он подсчитывает, сколько подсписков он прошел через aka 4 (до остановки)

Для alphabet_2, так как у второго подсписка есть 0 новых для всего списка, он останавливается. Это проходит через 2 (до остановки).

Любая помощь будет принята с благодарностью!

Ответы [ 3 ]

0 голосов
/ 30 марта 2020

Ни в коем случае не специалист, также не знакомый с python.

, просто мысль: сохранить каждый элемент, который уже встречался в «суперсписке», в другом списке.

Все, что вам нужно сделать, это проверить каждый элемент по новому списку с уже произошедшими элементами. Как только счет одного подсписка для «новых элементов (элементов, которые еще не встречались в суперсписке») = 0, вы прекращаете проверку и вместо этого подсчитываете количество пройденных вами списков.

process:

  1. создать список occuredItems (String)
  2. создать переменную checkLists (целое число)
  3. создать uniqueItems (целое число) для каждого проверяемого списка
  4. проверить каждый элемент в вашем суперсписке и добавьте элемент в occuredItems и установите uniqueItems + 1, если он еще не был частью списка
  5. , если вы проверили последний элемент каждого подсписка, который вы должны проверить, чтобы uniqueItems (из этого списка) были> 0. Для продолжения следующего подсписка. Если uniqueItems (для этого списка) действительно> 0: установите флажки + 1, если uniqueItems = 0, ваш алгоритм должен остановиться и продолжить с точки 6
  6. , вы можете просто вернуть checkLists для того, чтобы получить количество проверенных подсписков, прежде чем один подсписок не будет иметь уникальных предметов.

Надеюсь, это имело смысл для вас. и. Просто увидел этот пост и подумал, что могу помочь.

0 голосов
/ 30 марта 2020

вы можете использовать itertools.takewhile и itertools.accumulate

from itertools import accumulate
from itertools import takewhile

alphabet_1 = [['a', 'b', 'c'], ['a', 'c', 'd'], ['a', 'e', 'f',], ['a', 'b', 'c'], ['a', 'b', 'c']]
alphabet_2 = [['a', 'b', 'c'], ['a', 'b', 'c']]



def evaluate(l1, l2):
    s = set(l2)
    if s.issubset(l1):
        return False

    return s | set(l1)

def check(alphabet_):
    l = len(list(takewhile(bool, accumulate(alphabet_ , evaluate)))) + 1 
    return  min(l, len(alphabet_))

print(check(alphabet_1))
print(check(alphabet_2))

вывод:

4
2

элементы передаются throw itertools.acumulate, где функция evaluate проверяет, есть ли у каждого подсписка новые элементы или нет, когда обнаруживается, что у подсписка нет новых элементов, он возвращает False, в этот момент itertools.takewile остановит итерацию и затем окончательная длина возвращается

0 голосов
/ 30 марта 2020
def check_alphabet(a):
    i = 0
    curr_a = []
    for l in a:
        upd_a = list(set(curr_a + l))
        if len(upd_a) == len(curr_a):
            break
        i += 1
        curr_a = upd_a
    return i, curr_a
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...