Должен ли я использовать списочные выражения вместо нормальных для l oop? - PullRequest
0 голосов
/ 11 февраля 2020

Проблема

Предприятие хочет создать приложение, которое поможет коллекционерам наклеек отслеживать, какие у них карты, фигурки в виде множества наклеек, а иногда и коллекционер. повторяющиеся карты, и наиболее важными из них являются наклейки, которые считаются редкими.

Вступление

В первой строке указаны номера X int, обозначающие купленные наклейки, во второй строке имеет Y int числа, относящиеся к редким наклейкам.

Выход

Только одна строка, содержащая количество оставшихся фигурок.

Решение

Подход для l oop:

bought_stickers = [int(i) for i in input().split()]
rare_stickers = [int(i) for i in input().split()]

rare_stickers_left = len(rare_stickers)

for i in rare_stickers:
    if i in bought_stickers:
        rare_stickers_left -= 1

print(rare_stickers_left)

Подход к пониманию списка:

bought_stickers = [int(i) for i in input().split()]
rare_stickers = [int(i) for i in input().split()]

rare_stickers_left = [i for i in rare_stickers if i not in bought_stickers]
print(len(rare_stickers_left))

Мой вопрос: какое решение является наилучшим с учетом , читаемость, эффективность и все?

Кроме того, что лучше для кодирования олимпиад?

Ответы [ 3 ]

4 голосов
/ 11 февраля 2020

Ни то, ни другое: способ Pythoni c заключается в простом подсчете вхождений, а не в создании нового списка больших объектов.

rare_stickers_left = sum(i not in bought_stickers for i in rare_stickers)

Это просто суммирует все результаты True (принимаются как * 1005. *) .

1 голос
/ 11 февраля 2020

Вам не нужны первые 2 for loops здесь:

bought_stickers = input().split()
rare_stickers = input().split() 
rare_stickers_left = [int(i) for i in rare_stickers if i not in bought_stickers]
print(len(rare_stickers_left))
1 голос
/ 11 февраля 2020

Понимание списка:

  • Более сжато
  • Более "Pythoni c"
  • Более эффективно (избегает ненужных поисков переменных)
  • Проще, так меньше шансов для ошибок
  • et c.
...