部分扁平化列表

时间:2010-05-29 13:44:50

标签: python

这可能是一个非常愚蠢的问题但是,鉴于底部的示例代码,我如何获得保留元组的单个列表?

(我看过itertools,但它会使一切变平。)

我目前得到的是:

  

('id',20,'整数')
  ('companyname',50,'text')
   [('focus',30,'text'),('fiesta',30,'text'),('mondeo',30,'text'),('puma',30,'text' )]
  ('联系',50,'文字')
  ('email',50,'text')

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

  

('id',20,'整数')
  ('companyname',50,'text')
  ('焦点',30,'文字')
  ('fiesta',30,'text')
  ('mondeo',30,'text')
  ('puma',30,'text')

  ('联系',50,'文字')
  ('email',50,'text')

代码:

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

4 个答案:

答案 0 :(得分:2)

你可以进入

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

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

return sum(column_title_list, [])

您也可以使用

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

答案 1 :(得分: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)

答案 2 :(得分: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

答案 3 :(得分: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')