将我的打印输出成对返回作为元组?

时间:2017-05-05 17:43:24

标签: python output tuples

for div in soup.find_all('table', class_="W(100%)"):
       for y in div.find_all('td'):
           print (y.text)

返回输出:

Previous Close
38.08
Open
38.23
Bid
37.67 x 100
Ask
38.16 x 500
Day's Range
37.35 - 38.25
52 Week Range
23.50 - 40.92
Volume
29,152
Avg. Volume
118,446
Market Cap
1.66B

我想将输出返回为

(Previous Close, 38.08)
(Open, 38.23)
(Bid, 37.67 x 100)

老实说,我不知道如何解决这个问题。 我想过实现一个奇数和偶数计数器,但即便如此,我如何在下一个条目中加入前一个条目?

2 个答案:

答案 0 :(得分:2)

你可以通过遍历每个偶数索引并将该元素和后面的元素放在一对中来实现。以下内容可用作生成器:

def pairs(array):
    for i in range(0, len(array), 2):
        yield (array[i], array[i + 1])

或者,如果您希望函数返回对的列表:

def pairs(array):
    output = []
        for i in range(0, len(array), 2):
            output.append((array[i], array[i + 1])

或者,对于更简单(但不太可读)的程序:

def pairs(array):
    return map(lambda index: (array[index], array[index + 1]), range(0, len(array), 2))

如果你只想以那种格式输出它,除了将它转换为元组并输出它们之外,还有一种不同的直接方法:

def outputPairs(array):
    for i in range(0, len(array), 2):
        print("(" + str(array[i]) + ", " + str(array[i + 1]) + ")")

答案 1 :(得分:2)

查找<tr>元素),而不是单元格;然后,您可以按行分组单元格:

for row in soup.select('table.W(100%) tr'):
    columns = tuple(cell.text for cell in row.find_all('td'))
    print(columns)

我使用CSS select() method简明地请求给定表的所有表行。