如何按照Python的顺序组合三个不同大小的列表

2024-10-01 00:27:45 发布

您现在位置:Python中文网/ 问答频道 /正文

我有三个列表:signal、returns和pct_list:

     signal= ['signal0', 'signal1', 'signal2']

     returns = ['retSCIENCE_MSFT','retLOVE_MSFT','retMUSIC_MSFT',
                 'retSCIENCE_YHOO', 'retLOVE_YHOO', 'retMUSIC_YHOO']

     pct_list = ['Pct_MSFT', 'Pct_YHOO']

我尝试使用zip函数,结果如下:

^{pr2}$

输出:

     [('retSCIENCE_MSFT', 'signal0', 'Pct_MSFT'),
      ('retLOVE_MSFT', 'signal1', 'Pct_YHOO')]

我想得到的是MSFT和YHOO都有相应的信号和百分比变化,如下所示:

ret_sig_list = [('retSCIENCE_MSFT', 'signal0', 'Pct_MSFT'),
               ('retLOVE_MSFT', 'signal1', 'Pct_MSFT'),
               ('retMUSIC_MSFT', 'signal2', 'Pct_MSFT'),
               ('retSCIENCE_YHOO', 'signal0', 'Pct_YHOO'),
               ('retLOVE_YHOO', 'signal1', 'Pct_YHOO'),
               ('retMUSIC_YHOO','signal2', 'Pct_YHOO')]

我尝试使用list(zip(returns,signal,pct_list)),但它似乎默认为三个列表中元素数最少的,即pct_list。在

如果有人知道我该如何解决这个问题,我会非常高兴的! 我想使用带有for循环的ret_sig_list来计算多个股票的百分比变化率,根据相关的单词(科学、爱情、音乐等)给出回报。 我从一个名为Pytrends的Python包中得到了这个词,我推荐它,非常酷!在


Tags: 列表signalziplistreturnsmsftpctyhoo
2条回答

使用itertools.cycle

In [2]: from itertools import cycle

In [3]: list(zip(returns, cycle(signal), cycle(pct_list)))
Out[3]:
[('retSCIENCE_MSFT', 'signal0', 'Pct_MSFT'),
 ('retLOVE_MSFT', 'signal1', 'Pct_YHOO'),
 ('retMUSIC_MSFT', 'signal2', 'Pct_MSFT'),
 ('retSCIENCE_YHOO', 'signal0', 'Pct_YHOO'),
 ('retLOVE_YHOO', 'signal1', 'Pct_MSFT'),
 ('retMUSIC_YHOO', 'signal2', 'Pct_YHOO')]

所以我几乎找到了一个解决方案,虽然不理想,但很接近。我说“不理想”是因为不包括[“科学”,“爱”,“音乐”]列表中的特定词,但这是创建有序压缩列表的唯一方法。在

  stock_list = ['MSFT', 'YHOO'] 
  stock_list_v2 = []

     for stock in stock_list:
          for i in range(10):
           s = 'ret' + str(i) + '_' + stock

           stock_list_v2.append(s)    
  stock_list_v2   

输出:

^{pr2}$

下一个信号:

  sig = list(range(10))
  sig
  signal = ["signal{}".format(*sig) for sig in enumerate(sig)]
  signal

输出:

  ['signal0',
   'signal1',
   'signal2',
   'signal3',
   'signal4',
   'signal5',
   'signal6',
   'signal7',
   'signal8',
   'signal9']

下一个,百分比

   stock_list = ['MSFT', 'YHOO'] 
   stock_list_v3 = []

   for stock in stock_list:
         for i in range(10):

         p = 'pct' + str(i) + '_' + stock
        stock_list_v3.append(p)
  stock_list_v3

输出:

   ['pct0_MSFT',
    'pct1_MSFT',
    'pct2_MSFT',
    'pct3_MSFT',
    'pct4_MSFT',
    'pct5_MSFT',
    'pct6_MSFT',
    'pct7_MSFT',
    'pct8_MSFT',
    'pct9_MSFT',
    'pct0_YHOO',
    'pct1_YHOO',
    'pct2_YHOO',
    'pct3_YHOO',
    'pct4_YHOO',
    'pct5_YHOO',
    'pct6_YHOO',
    'pct7_YHOO',
    'pct8_YHOO',
    'pct9_YHOO']

现在我们像这样从itertools导入cycle。在

     from itertools import cycle

     full_list = list(zip(stock_list_v2, cycle(signal), stock_list_v3))

     full_list

输出:

     [('ret0_MSFT', 'signal0', 'pct0_MSFT'),
      ('ret1_MSFT', 'signal1', 'pct1_MSFT'),
      ('ret2_MSFT', 'signal2', 'pct2_MSFT'),
      ('ret3_MSFT', 'signal3', 'pct3_MSFT'),
      ('ret4_MSFT', 'signal4', 'pct4_MSFT'),
      ('ret5_MSFT', 'signal5', 'pct5_MSFT'),
      ('ret6_MSFT', 'signal6', 'pct6_MSFT'),
      ('ret7_MSFT', 'signal7', 'pct7_MSFT'),
      ('ret8_MSFT', 'signal8', 'pct8_MSFT'),
      ('ret9_MSFT', 'signal9', 'pct9_MSFT'),
      ('ret0_YHOO', 'signal0', 'pct0_YHOO'),
      ('ret1_YHOO', 'signal1', 'pct1_YHOO'),
      ('ret2_YHOO', 'signal2', 'pct2_YHOO'),
      ('ret3_YHOO', 'signal3', 'pct3_YHOO'),
      ('ret4_YHOO', 'signal4', 'pct4_YHOO'),
      ('ret5_YHOO', 'signal5', 'pct5_YHOO'),
      ('ret6_YHOO', 'signal6', 'pct6_YHOO'),
      ('ret7_YHOO', 'signal7', 'pct7_YHOO'),
      ('ret8_YHOO', 'signal8', 'pct8_YHOO'),
      ('ret9_YHOO', 'signal9', 'pct9_YHOO')]

希望能帮助那些好奇如何解决问题的人:) 再次感谢PrestonM建议使用algo,以及Juapana帮助建议使用itertools循环。在

相关问题 更多 >