我有2个相关的列表,我想阅读,整理和输出3列:
参考(id)列表为:NAMES_LIST = [a,b,c,...,z]
属性列表如下:前两个值“属于” id列表的第一个值,后两个值属于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
预先感谢您的帮助。
答案 0 :(得分:1)
这是一个示例,基于您在问题中提供的数据格式,使用纯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
随时问任何问题或您是否需要澄清。
答案 1 :(得分:1)
您不需要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'))]
我会让您弄清楚打印格式。
答案 2 :(得分:0)
您可以使用itertools
文档中的石斑鱼食谱:
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
的值无关紧要。
对于任何固定的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)):
...