Python使用While循环避免重复打印



我正在使用Python Selenium来解析一些live data(Bets),我使用While loop这是我的代码中的一些逻辑

def parse():
while True:
x = driver.find_element_by_xpath('//*[@id="bets-history"]/li[0]').text
print(x)

此代码工作,但输出为

1.54x
1.54x
1.54x
1.54x
1.54x
1.54x
1.54x
1.54x
1.54x
1.54x
1.54x
1.54x
1.54x
1.54x
1.54x
1.54x
1.54x
1.54x
1.54x
13.5x
13.5x
13.5x
13.5x
13.5x
13.5x
13.5x
13.5x
13.5x
13.5x
13.5x
13.5x

只打印一张照片的最佳方式是什么?例如像这个

1.54x
13.5x

您可以将第二个变量(y)分配给原始变量(x),然后将新值分配给x。然后,在if语句中检查它们是否不相等(!=)。

代码:

def parse():
x = ''
while True:
y = x
x = driver.find_element_by_xpath('//*[@id="bets-history"]/li[0]').text
if y != x:
print(x)
data = ['1.54x','1.54x','1.54x','1.54x','1.54x','1.54x','1.54x','1.54x','13.5x','13.5x','13.5x','13.5x','13.5x','13.5x','13.5x','13.5x']
previous_value = ''
for value in data:
if value != previous_value:
print(value)
previous_value = value

由于您只希望每个值打印一次,因此可以定义一个列表xs

对于每个定义的x,如果x的值已经在xs列表中,则不打印或将x的值附加到xs;否则,打印x的值,并将x的值附加到xs:

def parse():
xs = []
while True:
x = driver.find_element_by_xpath('//*[@id="bets-history"]/li[0]').text
if x not in xs:
xs.append(x)
print(x)

您必须存储唯一接收的值。稍后您可以检查新接收的值是否已经存在,然后不要打印此值,否则将其打印到控制台。

def parse():
stored_data = []
while True:
x = driver.find_element_by_xpath('//*[@id="bets-history"]/li[0]').text
if x not in stored_data:
print(x)
stored_data.append(x)

使用set而不是list可以更快地查找。

由于在您的问题中只有两个值,因此查找listset不会有太大区别。但如果有n值,

list将花费O(n)时间查找

set查找只需要O(1)时间

def parse():
s = set()
while True:
x = driver.find_element_by_xpath('//*[@id="bets-history"]/li[0]').text
if x not in s:
s.add(x)
print(x)

最新更新