为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕妹3242003 2021-08-05 17:59:51
我有 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_Var2b       b_Var1  b_Var2c       c_Var1  c_Var2.       ......  ......z       z_Var1  z_Var2在此先感谢您的帮助。
查看完整描述

3 回答

?
紫衣仙女

TA贡献1839条经验 获得超15个赞

您可以使用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)):

    ...


查看完整回答
反对 回复 2021-08-05
?
猛跑小猪

TA贡献1858条经验 获得超8个赞

您不需要 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'))]

我会让你弄清楚打印格式。


查看完整回答
反对 回复 2021-08-05
?
30秒到达战场

TA贡献1828条经验 获得超6个赞

这是一个示例,基于您在问题中提供的数据格式,使用纯 Python:


# Data

NAMES_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 data

ATTRIBUTES_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 result

print("Names  Var1   Var2")

print("-----  -----  -----")

for elem in output:

    print(elem)

输出:


Names  Var1   Var2

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

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

i      i_Var1  i_Var2

j      j_Var1  j_Var2

k      k_Var1  k_Var2

l      l_Var1  l_Var2

m      m_Var1  m_Var2

n      n_Var1  n_Var2

o      o_Var1  o_Var2

p      p_Var1  p_Var2

q      q_Var1  q_Var2

r      r_Var1  r_Var2

s      s_Var1  s_Var2

t      t_Var1  t_Var2

u      u_Var1  u_Var2

v      v_Var1  v_Var2

w      w_Var1  w_Var2

x      x_Var1  x_Var2

y      y_Var1  y_Var2

z      z_Var1  z_Var2

如有任何问题或需要任何说明,请随时提出。


查看完整回答
反对 回复 2021-08-05
  • 3 回答
  • 0 关注
  • 196 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号