猿问

Python(intertools?)迭代两个相关列表

我有 2 个相关列表,我想阅读、组织和输出 3 列:


参考(id)列表是: NAMES_LIST = [a,b,c,...,z]


属性列表如下:前 2 个值“属于”id 列表的第一个值,接下来的 2 个值属于 id 列表的第二个值,依此类推:


ATTRIBUTES_LIST =  [a_Var1 ,a_Var2,

                    b_Var1, b_Var2,

                    c_Var1, c_Var2,

                    ......

                    z_Var1, z_Var2]

我想编写一个 Python 代码(使用 intertools?)来打印 3 列:


Names   Var1    Var2

-----   ------  ------

a       a_Var1  a_Var2

b       b_Var1  b_Var2

c       c_Var1  c_Var2

.       ......  ......

z       z_Var1  z_Var2

在此先感谢您的帮助。


慕妹3242003
浏览 197回答 3
3回答

紫衣仙女

您可以使用itertools文档中的 grouper 配方:def grouper(iterable, n, fillvalue=None):    "Collect data into fixed-length chunks or blocks"    # grouper('ABCDEFG', 3, 'x') --> ABC DEF Gxx    args = [iter(iterable)] * n    return izip_longest(fillvalue=fillvalue, *args)for name, (attr1, attr2) in zip(NAMES_LIST, grouper(ATTRIBUTES_LIST, 2)):    ...似乎您可以假设 的ATTRIBUTES_LIST元素数量正好是 的两倍NAMES_LIST,这使得 的值fillvalue在这种情况下无关紧要。对于任何 fixed n,仅硬编码适当的石斑鱼可能更简单(并且可能更有效):def group2(iterable):    itr = iter(iterable)    while True:        x = next(itr)        y = next(itr)        yield (x, y)for name, (attr1, attr2) in zip(NAMES_LIST, group2(ATTRIBUTES_LIST)):    ...

猛跑小猪

您不需要 itertools 来进行此分组...NAMES_LIST = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h']ATTRIBUTES_LIST = [     'a_var1', 'a_var2',     'b_var1', 'b_var2',     'c_var1', 'c_var2',     'd_var1', 'd_var2',     'e_var1', 'e_var2',     'f_var1', 'f_var2',     'g_var1', 'g_var2',     'h_var1', 'h_var2'     ]num_items = min(int(len(ATTRIBUTES_LIST)/2), len(NAMES_LIST)) # this is just to be safe.b = [(NAMES_LIST[x], (ATTRIBUTES_LIST[2*x], ATTRIBUTES_LIST[2*x+1])) for x in range(num_items)]print(b)以上返回以下输出:[('a', ('a_var1', 'a_var2')), ('b', ('b_var1', 'b_var2')), ('c', ('c_var1', 'c_var2')), ('d', ('d_var1', 'd_var2')), ('e', ('e_var1', 'e_var2')), ('f', ('f_var1', 'f_var2')), ('g', ('g_var1', 'g_var2')), ('h', ('h_var1', 'h_var2'))]我会让你弄清楚打印格式。

30秒到达战场

这是一个示例,基于您在问题中提供的数据格式,使用纯 Python:# DataNAMES_LIST = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z']ATTRIBUTES_LIST =  ['a_Var1', 'a_Var2', 'b_Var1', 'b_Var2', 'c_Var1', 'c_Var2', 'd_Var1', 'd_Var2', 'e_Var1', 'e_Var2', 'f_Var1', 'f_Var2', 'g_Var1', 'g_Var2', 'h_Var1', 'h_Var2', 'i_Var1', 'i_Var2', 'j_Var1', 'j_Var2', 'k_Var1', 'k_Var2', 'l_Var1', 'l_Var2', 'm_Var1', 'm_Var2', 'n_Var1', 'n_Var2', 'o_Var1', 'o_Var2', 'p_Var1', 'p_Var2', 'q_Var1', 'q_Var2', 'r_Var1', 'r_Var2', 's_Var1', 's_Var2', 't_Var1', 't_Var2', 'u_Var1', 'u_Var2', 'v_Var1', 'v_Var2', 'w_Var1', 'w_Var2', 'x_Var1', 'x_Var2', 'y_Var1', 'y_Var2', 'z_Var1', 'z_Var2']# Manipulating dataATTRIBUTES_LIST = [ATTRIBUTES_LIST[i:i+2] for i in range(0, len(ATTRIBUTES_LIST), 2)]output = ["  ".join([char, "    " + var[0], var[1]]) for char, var in list(zip(NAMES_LIST, ATTRIBUTES_LIST))]# Printing resultprint("Names  Var1   Var2")print("-----  -----  -----")for elem in output:    print(elem)输出:Names  Var1   Var2-----  -----  -----a      a_Var1  a_Var2b      b_Var1  b_Var2c      c_Var1  c_Var2d      d_Var1  d_Var2e      e_Var1  e_Var2f      f_Var1  f_Var2g      g_Var1  g_Var2h      h_Var1  h_Var2i      i_Var1  i_Var2j      j_Var1  j_Var2k      k_Var1  k_Var2l      l_Var1  l_Var2m      m_Var1  m_Var2n      n_Var1  n_Var2o      o_Var1  o_Var2p      p_Var1  p_Var2q      q_Var1  q_Var2r      r_Var1  r_Var2s      s_Var1  s_Var2t      t_Var1  t_Var2u      u_Var1  u_Var2v      v_Var1  v_Var2w      w_Var1  w_Var2x      x_Var1  x_Var2y      y_Var1  y_Var2z      z_Var1  z_Var2如有任何问题或需要任何说明,请随时提出。
随时随地看视频慕课网APP

相关分类

Python
我要回答