在Python中组织列表列表

时间:2014-02-14 18:18:03

标签: python list python-2.7

假设有Python中的列表列表:

list_of_values = [[a, b, c], [d, e, f], [g, h, i], [j, k, l]]

我想自动转换为独立列表,如:

list1 = [[a, b, c],[d + g + j, e + h + k, f + i + l]]
list2 = [[d, e, f], [g + j, h + k, i + l]]
list3 = [[g, h, i], [j, k, l]]

假设我在Python中有一个整数列表列表:

list_of_values = [[1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 11, 12]]

我想自动转换为独立列表,如:

list1 = [[1, 2, 3],[4 + 7 + 10, 5 + 8 + 11, 6 + 9 + l2]]
list2 = [[4, 5, 6], [7 + 10, 8 + 11, 9 + 12]]
list3 = [[7, 8, 9], [10, 11, l2]]

执行数学运算:

list1 = [[1, 2, 3], [21, 24, 27]]
list2 = [[4, 5, 6], [17, 19, 21]]
list3 = [[7, 8, 9], [10, 11, l2]]

3 个答案:

答案 0 :(得分:3)

>>> import itertools
>>> lst = [['a', 'b', 'c'], ['d', 'e', 'f'], ['g', 'h', 'i'], ['j', 'k', 'l']]
>>> for i, item in enumerate(lst):
        print [item, itertools.chain.from_iterable(lst[i+1:])]

[['a', 'b', 'c'], ['d', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l']]
[['d', 'e', 'f'], ['g', 'h', 'i', 'j', 'k', 'l']]
[['g', 'h', 'i'], ['j', 'k', 'l']]
[['j', 'k', 'l'], []]

答案 1 :(得分:3)

您的更新问题:

假设您有“字符串列表”列表,如下所示:

s = [['a', 'b', 'c'], ['d', 'e', 'f'], ['g', 'h', 'i'], ['j', 'k', 'l']]

然后你可以使用:join来连接:

>>> for i in range(len(s)):
...  [s[i], map(lambda t: ''.join(t), zip(*s[i + 1:]))]
... 
[['a', 'b', 'c'], ['dgj', 'ehk', 'fil']]
[['d', 'e', 'f'], ['gj', 'hk', 'il']]
[['g', 'h', 'i'], ['j', 'k', 'l']]
[['j', 'k', 'l'], []]

如果你不需要输出中的最后一行,那么只需使用范围参数小于长度之一:

>>> for i in range(len(s)-1):
...  [s[i], map(''.join, zip(*s[i + 1:]))] # remove lambda function
... 
[['a', 'b', 'c'], ['dgj', 'ehk', 'fil']]
[['d', 'e', 'f'], ['gj', 'hk', 'il']]
[['g', 'h', 'i'], ['j', 'k', 'l']]

但是假设你有“数字列表”,例如:

l = [[1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 11, 12]]

然后你可以使用sum函数:

>>> for i in range(len(l) - 1):
...  [l[i], map(sum, zip(*l[i + 1:]))]
... 
[[1, 2, 3], [21, 24, 27]]
[[4, 5, 6], [17, 19, 21]]
[[7, 8, 9], [10, 11, 12]]

修改: ..

如果您想为字符串和数字创建单个函数,那么您可以使用add()库中的operator运算符。

检查add()功能:

>>> from operator import add
>>> add(1, 2)
3
>>> add('1', '2')  # this is like + works
'12'

现在,使用它创建一个新的my_add(),添加序列中的所有元素,检查以下代码:

>>> def my_add(t):
...  return reduce(add, t)
... 
>>> my_add(('a', 'b'))
'ab'

>>> my_add((2, 1))
3

现在,使用my_add()函数编写一个函数,以便您的工作:

def do_my_work(s):
    for i in range(len(s)-1):
        print [s[i], map(my_add, zip(*s[i + 1:]))]    

现在,看看这对你有何用处:

>>> s
[['a', 'b', 'c'], ['d', 'e', 'f'], ['g', 'h', 'i'], ['j', 'k', 'l']]
>>> do_my_work(s)
[['a', 'b', 'c'], ['dgj', 'ehk', 'fil']]
[['d', 'e', 'f'], ['gj', 'hk', 'il']]
[['g', 'h', 'i'], ['j', 'k', 'l']]
>>> l
[[1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 11, 12]]
>>> do_my_work(l) # so same function for str and int both! 
[[1, 2, 3], [21, 24, 27]]
[[4, 5, 6], [17, 19, 21]]
[[7, 8, 9], [10, 11, 12]]

答案 2 :(得分:2)

for i in range(len(list_of_values) - 1):
    print [list_of_values[i]] + [map(list, zip(*list_of_values[i+1:]))]

<强>输出

[['a', 'b', 'c'], [['d', 'g', 'j'], ['e', 'h', 'k'], ['f', 'i', 'l']]]
[['d', 'e', 'f'], [['g', 'j'], ['h', 'k'], ['i', 'l']]]
[['g', 'h', 'i'], [['j'], ['k'], ['l']]]

对于数字,你可以简单地做

list_of_values = [[1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 11, 12]]
for i in range(len(list_of_values) - 1):
    print [list_of_values[i]] + [map(sum, zip(*list_of_values[i+1:]))]

<强>输出

[[1, 2, 3], [21, 24, 27]]
[[4, 5, 6], [17, 19, 21]]
[[7, 8, 9], [10, 11, 12]]