【问题标题】:iterate over several collections in parallel并行迭代多个集合
【发布时间】:2017-04-21 01:17:34
【问题描述】:

我正在尝试通过循环创建一个对象列表(来自之前定义的类)。结构类似于:

ticker_symbols = ["AZN", "AAPL", "YHOO"]
stock_list = []  
for i in ticker_symbols:                                                             
    stock = Share(i)                                                                        
    pe = stock.get_price_earnings_ratio()                                            
    ps = stock.get_price_sales()                                                     
stock_object = Company(pe, ps)                     
stock_list.append(stock_object)  

但是,我想通过循环向公司对象 (stock_object) 添加一个属性。该属性将是另一个列表中的值,例如(任意数字)[5,10,20],其中第一个属性将转到第一个对象,第二个属性将转到第二个对象等。是否可以执行以下操作:

for i, j in ticker_symbols, list2:
    #dostuff

?无法让这种嵌套循环自行工作。感谢您的帮助。

【问题讨论】:

  • for i, j in zip(ticker_symbols, list2): - 现在你准备好了。

标签: python class loops object for-loop


【解决方案1】:

我相信您所要做的就是更改 for 循环。 而不是“for i in ticker_symbols:”你应该像这样循环 "for i in range(len(ticker_symbols))" 然后使用索引 i 对第二个列表做任何你想做的事情。

ticker_symbols = ["AZN", "AAPL", "YHOO"]
stock_list = []  
for i in range(len(ticker_symbols):
    stock = Share(ticker_symbols[i])
    pe = stock.get_price_earnings_ratio()
    ps = stock.get_price_sales()
    # And then you can write
    px = whatever list2[i]
    stock_object = Company(pe, ps, px)
    stock_list.append(stock_object)

有人说使用索引进行迭代不是很好的做法,但如果代码有效,我不这么认为。

【讨论】:

  • 迭代虽然在python中不鼓励索引(除非有特定的原因),并且有更好的方法来实现相同的目标。
【解决方案2】:

试试:

for i, j in zip(ticker_symbols, list2):

或者

for (k, i) in enumerate(ticker_symbols):
    j = list2[k]

等价:

for index in range(len(ticker_symbols)):
    i = ticker_symbols[index]
    j = list2[index]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-08-23
    • 2022-01-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-07
    • 2020-11-22
    相关资源
    最近更新 更多