2016-06-07 64 views
0

我对Python很新颖,而且我刚开始学习列表解析。但是,我不能用它们重写下面的代码。任何帮助,将不胜感激。如何使用列表推导重新创建以下内容?

for i in range(len(table)): 
    table[i*2] += " |" 
    table.insert(2*i + 1, "-"*(len(table[0]))) 

这是一个功能,通过增加其漂亮的打印表格的一部分“|”到每一行,然后在下面一行插入一整行“ - ”。

+0

是'table'本身可迭代的吗? – castis

+0

要澄清你想要的东西,请在你的问题中添加一个例子。你没有包含破折号的换行符,所以我不完全确定你想要什么。 – Prune

+0

另请输入样本输入 – rrauenza

回答

3
table = [ "a", "b", "c", "d"] 

table[:] = [x for i in table for x in [i + ' |', '-'*(2+len(table[0]))]] 

print (table) 

# Result: 
# ['a |', '---', 'b |', '---', 'c |', '---', 'd |', '---'] 

作为一个可读的替代你写的,试试这个:

newtable = [] 
for i in table: 
    newtable.append(i + ' |') 
    newtable.append('-'*len(newtable[0])) 

即使它不使用列表理解,它可能是更直接的理解。

0

您的代码仅相当于串联:

In [1]: table = ["foo","bar", "foobar","foob","barf"] 

In [2]: 

In [2]: for i in range(len(table)): 
    ...:   table[i*2] += " |" 
    ...:   table.insert(2*i + 1, "-"*(len(table[0]))) 
    ...:  

In [3]: print("".join(table)) 
foo |-----bar |-----foobar |-----foob |-----barf |----- 

In [4]: table = ["foo","bar", "foobar","foob","barf"] 

In [5]: print("".join([ele + " |-----" for ele in table])) 
foo |-----bar |-----foobar |-----foob |-----barf |----- 

很明显,你会替代硬编码------使用表[0] + 2的长度占了2个额外字符您" |"添加在循环:

table = ["foo", "bar", "foobar", "foob", "barf"] 

form = " |" + "-" * (2 + len(table[0])) 
print("".join([ele + form for ele in table])) 

但是,如果你想有一个特定的格式,str.join可能是更合适:

" |{}".format("-" * (2 + len(table[0]))).join(table) 
相关问题