2010-05-29 48 views
1

这可能是一个非常愚蠢的问题,但是,考虑到底部的示例代码,我将如何获得保留元组的单个列表?部分展平列表

(我看了itertools但它变平的一切。)

我目前得到的是:

( '身份证',20 '整')
( '公司名称' ,'50','text')
[('focus',30,'text'),('fiesta',30,'text'),('mondeo',30,'text'),('puma ',30,'text')]
('contact',50,'text')
('email',50,'text')

相反,我需要一个单级列表:

( '身份证',20 '整')
( '公司名称',50, '文本')
(”焦点,30, '文本')
( '嘉年华',30, '文本')
( '蒙迪欧',30, '文本')
( '美洲狮',30, '文本')

('contact',50,'text')
( '电子邮件',50, '文本')

代码:

def getproducts(): 
    temp_list = [] 

    product_list = ['focus', 'fiesta', 'mondeo', 'puma'] 
    # usually this would come from a db 

    for p in product_list: 
     temp_list.append((p, 30, 'text')) 
    return temp_list 

def createlist():  
    column_title_list = (
     ("id", 20, "integer"), 
     ("companyname", 50, "text"), 
     getproducts(), 
     ("contact", 50, "text"), 
     ("email", 50, "text"), 
    ) 
    return column_title_list 

for item in createlist(): 
    print item 

回答

2

你能使其成为

[[("id",20,"integer")], 
[("companyname",50,"text")], 
getproducts(), 
...] 

?如果是这样,你只需要连接列表。

return sum(column_title_list, []) 

你也可以使用

return [("id",20,"integer"),("companyname",50,"text")] + getproducts() + ... 
+0

嗨KennyTM和Ofri。你的答案都非常相似。谢谢。我会看看这样做。 – alj 2010-05-29 14:09:25

0
def createlist():  
    column_title_list = [ ("id",20,"integer"), 
          ("companyname",50,"text") ] 
    column_title_list.extend(getproducts()) 
    column_title_list.extend([ ("contact",50,"text"), 
           ("email",50,"text") ]) 

    return column_title_list 
+0

嗨,看下面.. – alj 2010-05-29 14:09:43

0

尝试用一个列表,而不是一个元组的工作。当你完成装配时,你可以把一个列表变成一个元组。

#!/usr/bin/env python 

def getproducts(): 
    temp_list=[] 
    # usually this would come from a db 
    product_list=['focus','fiesta','mondeo','puma'] 
    for p in product_list: 
     temp_list.append((p, 30, 'text')) 
    return temp_list 

def createlist():  
    column_title_list = [ 
     ("id", 20, "integer"), 
     ("companyname", 50, "text") 
    ] 
    column_title_list += getproducts() 
    column_title_list += [ 
     ("contact", 50, "text"), 
     ("email", 50, "text"), 
    ] 

    return tuple(column_title_list) 

for item in createlist(): 
    print item 

这将导致:

# ('id', 20, 'integer') 
# ('companyname', 50, 'text') 
# ('focus', 30, 'text') 
# ('fiesta', 30, 'text') 
# ('mondeo', 30, 'text') 
# ('puma', 30, 'text') 
# ('contact', 50, 'text') 
# ('email', 50, 'text') 
2

这可能不是你要找的答案,但为什么浪费时间去寻找解决这个奇特的方式,当直线前进解决方案让你继续前进并解决程序中更有趣的部分?

def createlist(): 
    tmp = [] 
    tmp.extend([("id",20,"integer"), ("companyname",50,"text")]) 
    tmp.extend(getproducts()) 
    tmp.extend([("contact",50,"text"), ("email",50,"text")]) 
    return tuple(tmp) 
+0

感谢布赖恩。明智的话。我总是陷入困境,试图想出一些聪明的东西。那为什么它需要我很久。 – alj 2010-05-29 14:11:26