重新排列列表列表,以便先前的列表分布在以后的列表中

时间:2015-04-02 03:39:04

标签: python list

我有一个嵌套列表:

[   [   'col1',
        'col2',
        'col3',
        'col4',
        'some comment',
        'another comment'],
    [   'col1',
        'col2',
        'col3',
        'col4',
        'someone said something',
        'a comment here',
        'more blah blah']
]

我正在寻找一种更优雅,更灵巧的方式来结束:

[   [  'col1', 'col2', 'col3', 'col4', 'some comment'],  
    [  'col1', 'col2', 'col3', 'col4', 'another comment'] ],
    [  'col1', 'col2', 'col3', 'col4', 'someone said something'],  
    [  'col1', 'col2', 'col3', 'col4', 'a comment here']
    [  'col1', 'col2', 'col3', 'col4', 'more blah blah']

比我到目前为止所做的那样。

  • 幸运的是,我所有的内部列表都有相同的4个字符串(又名col1col2, 等等)。
  • 我有很多内心清单(不仅仅是2个)。
  • 每个内部列表中的前4个字符串后面至少有一个字符串;经常有很多。

3 个答案:

答案 0 :(得分:0)

假设您当前的列表位于名为old_list的变量中:

base = old_list[0][:4]
new_list = []

for line in old_list:
    for comment in line[4:]:
        new_list.append(base + [comment])

答案 1 :(得分:0)

使用for循环和切片:

l = [   [   'col1',
        'col2',
        'col3',
        'col4',
        'some comment',
        'another comment'],
    [   'col1',
        'col2',
        'col3',
        'col4',
        'someone said something',
        'a comment here',
        'more blah blah']
]

o = []
for e in l:
    for p in e[4:]:
        o.append(e[:4]+[p])

o的结果是:

[['col1', 'col2', 'col3', 'col4', 'some comment'], 
 ['col1', 'col2', 'col3', 'col4', 'another comment'], 
 ['col1', 'col2', 'col3', 'col4', 'someone said something'], 
 ['col1', 'col2', 'col3', 'col4', 'a comment here'], 
 ['col1', 'col2', 'col3', 'col4', 'more blah blah']]

上述循环的理解版本是:

o = [e[:4]+[p] for p in e[4:] for e in l]

答案 2 :(得分:0)

嵌套循环结构是您想要的,可以通过嵌套循环理解轻松处理

[inner[0:4] + [rest] for rest in  inner[4:]  for inner in in_lst]

这里唯一的技巧是了解数据布局和预期的布局,并确定可以实现的映射,

即给出

[   [   'col1',
        'col2',
        'col3',
        'col4',
        'some comment',
        'another comment'],
    [   'col1',
        'col2',
        'col3',
        'col4',
        'someone said something',
        'a comment here',
        'more blah blah']
]

将输入数据的行划分为两组

[[['col1', 'col2', 'col3', 'col4'], 
  ['some comment', 'another comment']],
 [['col1', 'col2', 'col3', 'col4'],
  ['someone said something', 'a comment here', 'more blah blah']]]

并循环使用第一个组项目

扩充第二个组项目中的所有项目