Динамически искать index () в списке из набора опций - PullRequest
0 голосов
/ 13 января 2020
def _parse_options(productcode_array):
    if not self._check_productcode_has_options(productcode_array):
        return None
    possible_options = {"UV1", "UV2", "Satin", "Linen", "Unco", "Natural"}
    option_index = productcode_array.index()

Пример значения productcode_array:

["BC", "1.5x3.5", "100lb", "Linen", "Q100"]

Моей первоначальной мыслью было, возможно, try/except с пониманием списка, но я чувствую, что, возможно, есть более чистый способ, о котором я не знаю.

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

Какой будет чистый и эффективный способ использования index() с каждым из значений моего possible_options комплект

Ответы [ 3 ]

1 голос
/ 13 января 2020

Можно использовать set.intersection, а затем присвоить option_index (при условии, что в комментариях указано только одно общее значение):

Например:

possible_options = {"UV1", "UV2", "Satin", "Linen", "Unco", "Natural"}
productcode_array = ["BC", "1.5x3.5", "100lb", "Linen", "Q100"]

for v in possible_options.intersection(productcode_array):
    option_index = productcode_array.index(v)

print(option_index)

Печать :

3
1 голос
/ 13 января 2020
>>> next(i for i, code in enumerate(productcode_array) if code in possible_options)
3

или

>>> productcode_array.index(possible_options.intersection(productcode_array).pop())
3
1 голос
/ 13 января 2020

Пример с try/except:

for x in possible_options:
  try:
    option_index = productcode_array.index(x)
  except ValueError:
    pass

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

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