Необходимо объединить 2000 переменных в список для использования в цикле for - PullRequest
0 голосов
/ 29 марта 2019

Я пытаюсь использовать цикл for для циклического прохождения 2000 итераций в селене. Я создал свои перестановки и создал отдельные переменные для каждой перестановки (использовал Excel для их объединения).

У меня есть переменные, перечисленные в A1 ... A2000. Мне нужно поместить это в один список, чтобы я мог использовать его в цикле for с моим кодом. Они знают только то, как, если я разделю их запятой (например, A1, A2, A3 ...), но это нереально для 2000 переменных.

Есть предложения?

Переменные перечислены последовательно так:

    A1 = ('xpath text')
    A2 = ('xpath text')
    A2000 = ('xpath text')

Я использую селен для веб-сканирования через выпадающие списки

    for i in range(1, 2000):
      xpathlist = [A&i]
      for xp in xpathlist:
        b.find_element_by_xpath(xp)
        click = download.click()

Ответы [ 2 ]

0 голосов
/ 29 марта 2019

... используется Excel, чтобы объединить их ...

Возможно, я слишком много читаю, но вы можете обойти Excel, например:

from itertools import product

NAMES= ('x', 'y', 'z')
VALUES = ('foo', 'bar')

nvs = [f'{n} {v}' for n, v in product(NAMES, VALUES)]
print(nvs)

['x foo',
 'x bar',
 'y foo',
 'y bar',
 'z foo',
 'z bar']

Или для перестановок (как вы сказали):

from itertools import permutations

VALUES = ('foo', 'bar', 'baz', 'qux')

perms = [f'{a}/{b}/{c}' for a, b, c in permutations(VALUES, 3)]
print(perms)
['foo/bar/baz', 'foo/bar/qux', 'foo/baz/bar', 'foo/baz/qux',
 'foo/qux/bar', 'foo/qux/baz', 'bar/foo/baz', 'bar/foo/qux',
 'bar/baz/foo', 'bar/baz/qux', 'bar/qux/foo', 'bar/qux/baz',
 'baz/foo/bar', 'baz/foo/qux', 'baz/bar/foo', 'baz/bar/qux',
 'baz/qux/foo', 'baz/qux/bar', 'qux/foo/bar', 'qux/foo/baz',
 'qux/bar/foo', 'qux/bar/baz', 'qux/baz/foo', 'qux/baz/bar']

Тогда вы можете просто перебрать список nvs или perms

0 голосов
/ 29 марта 2019

Предположим, у вас есть все эти переменные в модуле foo.py:

import foo
all_vars = (getattr(foo, f'A{i}') for i in range(1, 2000))

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

Примечание: Я использовал отформатированные строки (f''), для которых требуется Python 3.6+, для более старых версий используйте 'A{}'.format(i) или'A%d' % i.

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