Как удалить элемент списка с помощью цикла while - PullRequest
0 голосов
/ 12 мая 2018

Я открываю веб-страницу, чтобы получить имена кластера1 (p1, p2). Я не уверен, сколько раз мне нужно открывать веб-страницу, чтобы получить эти имена cluster1. Итак, я использую цикл while, он удалит p1 или p2, в зависимости от того, какое значение получено с веб-страницы.

Когда я открою веб-страницу, я получу p1 или p2, и это значение будет сохранено в новом [-1]. Если это значение находится в cluster1, оно выполнит другие тестовые функции, и это значение будет удалено из cluster1.

new = ['some',  'list' 'items', 'p1'] # last element of list is either p1 or p2. So, new[-1] will give p1 or p2.

cluster1 =[ 'p1', 'p2'] 

 while len(cluster1) != 0:
    print("Length of cluster1 before:", len(cluster1))
    # for i in range(10):

    if new[-1] in cluster1:
        print(new[-1] + " is in cluster1.")
        test1()
        test2()
        new_ver_names.append(new[-1])
        cluster1.remove(new[-1])
        print("Length of cluster1 after:", len(cluster1))
    else:
            print(new[-1] + " portal version is not listed.")
            driver.quit()
            break

Мое исключение заключается в том, что при удалении значения элемент управления должен вернуться к циклу while и начать снова, пока len (cluster1) не станет 0. И, если значение не находится в cluster1, должно выполняться другое значение past. Но когда я удаляю cluster1.remove(new[-1]), остальная часть также выполняется.

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

Я пытался lst = [(teset1(), test2()) for i in range(len(cluster1)) if new[-1] in cluster1]

Любая помощь очень ценится.

Спасибо.

Edit:

def login1():

ChromeDriver = 'C:\\PortalTesting\\Drivers\\chromedriver.exe'
chrome_options = webdriver.ChromeOptions()
chrome_options.add_argument('--no-sandbox')
chrome_options.add_argument("--incognito")

chrome_options.add_argument("--window-size=1920x1080")
driver = webdriver.Chrome(executable_path=ChromeDriver, chrome_options=chrome_options)
driver.maximize_window()
driver.implicitly_wait(130)

driver.get("MY_URL")
print("session id ", driver.session_id)
username = driver.find_element_by_css_selector("#uid")
username.send_keys("username")
password = driver.find_element_by_css_selector("#pid")
password.send_keys("password")

login_button = driver.find_element_by_class_name("secondarybtnlabel")
login_button.click()
# time.sleep(10)
cluster1 = ['p1', 'p2']
dc_elm = driver.find_element_by_xpath('/html/body/div[4]/div/div[2]/span[2]').text
new = unicodedata.normalize('NFKD', dc_elm).encode('ascii', 'ignore').split()
print("Portal version: ", new[-1])
logout_btn = driver.find_element_by_xpath('/html/body/div[4]/div[2]/div/div[4]/div/div[2]/div/header/div[2]/table/tbody/tr/td[3]/div/li')
logout_btn.click()

driver.delete_all_cookies()
print("Clearing cookies")
new_ver_names = []
time.sleep(3)

while len(cluster1) != 0:
    print("Length of cluster1 before:", len(cluster1))
    # for i in range(10):
    if new[-1] in cluster1:
        print(new[-1] + " is in cluster1.")
        test1()
        test2()

        new_ver_names.append(new[-1])

        # cluster1.remove(new[-1])
        print("Length of cluster1 after:", len(cluster1))
    else:
            print(new[-1] + " portal version is not listed.")
            driver.quit()
            break
        # cluster1.remove(new[-1])

1 Ответ

0 голосов
/ 12 мая 2018

Трудно (для меня) понять, что происходит в текущем коде, но почему бы не попробовать set s?

new = {'some',  'list' 'items', 'p1'}
cluster1 ={'p1', 'p2'}

in_both = new & cluster1
not_found = cluster1 - new

# do stuff with values in `in_both` and `not_found`....
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...