2014-10-10 102 views
-2

我有一个函数,其参数是两个列表对。第二对的第二个元素也是对的列表,第一个目标是获取list1,list2list3中每对的第一个元素。功能如下:如何访问列表中对的第一个元素

def function(list1[(,)] , list2[(,list3[(,)])] 

像这样的事情,对不起,它是部分在葡萄牙

sales_stats(

... [( “兵马俑”,800),( “马尔特” (“阿维罗”,[(“Terra”,110),(“Marte”,227),(“Sol”,100),(“Urano”,100)],

... [ ,(“Sol”,137),(“Urano”,97)]),

...(“Agueda”,[(“Marte” ,424),(“Terra”,91),(“Sol”,146),(“Urano”,227)]),

...(“Coimbra”,[(“Marte”,117) ,(“Sol”,116),(“Terra”,121),(“Urano”,97)]),

...(“Porto”,[(“Marte”,267)溶胶“,176),( ”浦野“,67),( ”泰拉“,66)])])

输出是东西看起来像这样: ( '马尔特',1035,1399950)

+5

请告诉我们一个简单的例子,以及预期中提取值。 – 2014-10-10 18:41:22

+1

对不起,我不明白你的代码示例。函数参数列表通常不包含方括号或括号。 – Kevin 2014-10-10 18:42:25

+0

@Kevin我想​​象的是OP正试图表示方法签名合同。 – aruisdante 2014-10-10 18:43:24

回答

0

如果这是家庭作业,我会非常难过....

但是bas编辑您有限的描述,我想这是你所追求的:

def function(list_a, list_b): 
    ''' 
    :type list_a: [(val_a1, val_a2), ...] 
    :type list_b: [(val_b1, [(val_b2,val_b3),...]),...] 
    :rtype: [val_a1, ...], [val_b1, ...], [val_b2,...] 
    ''' 
    list_a_1 = [first for first, _second in list_a] # This one is easy, just do a simple list comp 

    list_b_1, list_b_2_temp = zip(*list_b) # This will split list_b into [value, ...], [[(value, value),..],...]. list_b_1 is already what we want 
    list_b_2 = [] 
    for items in list_b_2_temp: 
    # we strip off the first element of each tuple for each list, then extend the final list by them 
     list_b_2.extend(first for first, _second in items) 
    return list_a_1, list_b_1, list_b_2 

用法示例:

list_a = [(1,2),(3,4),(5,6)] 
list_b = [(1, [('1','2'),('3','4')]), (2,[('5','6'),('7','8')])] 
>>> function(list_a, list_b) 
([1, 3, 5], (1, 2), ['1', '3', '5', '7']) 
+0

@AndréLopes请注意,您可以使用itertools.chain使最终列表的构建更高效。from_iterable'和列表理解组合,但这是为了确定您是否想要。如果此答案适合您,请通过大灰色复选标记接受它 – aruisdante 2014-10-10 18:58:56

相关问题