遍历列表列表并追加到新列表

时间:2019-08-21 22:05:54

标签: python

我具有以下结构,

new_lists_ = [a1,b1,c1,d1,e1,f1] # empty individual lists.

在每个列表中都有一些变量,我想访问这些变量并传递到列表中。

lists_

因此,我想从a中访问a1中的所有变量,并将它们传递到for list_ in lists_: for new_list_ in new_lists_: for l in list_: new_list.append(l) 中,我希望这是一个简单的衬里。(但是我更喜欢可读性!)

我自己的尝试:

attribute

^这会将所有项目添加到所有列表中,所以不是我想要的。

自然,我可以单独访问每个列表并以这种方式进行迭代,但是我觉得这不是一个好习惯。我不确定上述做法是好是坏,因此,请多多指教。

(也是我的第一个非熊猫问题,所以我想这是一个里程碑。.?!)

3 个答案:

答案 0 :(得分:2)

我认为您正在寻找的是copy.deepcopy

from copy import deepcopy

new_lists_ = deepcopy(lists_)
  

深层副本构造一个新的复合对象,然后递归地将原始对象中的对象的副本插入其中。


或者使用您的方法,也许您应该改为迭代索引:

for i in range(len(lists_)):
    for elem in lists_[i]:
        new_lists_[i].append(elem)

或根据要求提供单线:

new_lists_ = [[elem for elem in lists_[i]] for i in range(len(lists_))]

注意:在第一种方法的显式循环中,您必须确保所有子列表均已初始化,否则您将获得{{1 }}。在列表理解的第二种方法中,我们只需创建一个新列表即可。

答案 1 :(得分:1)

嵌套循环是您通常要避免的事情。

如果您真的想坚持使用超级pythonic嵌套循环的方式,这应该可以工作:

new_lists_ = []

for list_ in lists_:
  new_list_ = []
  for l in list_:
    #some computation on l, stored in stuff, and appended to new_list_
    new_list_.append(stuff)
  new_lists_.append(new_list_)

但这在调试时很难阅读和遵循。

一种帮助调试的方法是在python循环中使用enumerate(item)方法。

但我认为,更好的方法是将此处理(和嵌套循环)拆分为另一种方法,例如:

def some_function(list_):
  #do some stuff here, store in processed_list_
  processed_list_ = []
  for l in list_:
    processed_list_.append(l) #you'll want to modify l, of course
  return processed_list_

new_lists_ = []

for list_ in lists_:
  new_lists_.append(some_function(list_))

我认为要简单得多。

如果您遵循一些特殊的样式指南,则可以忽略它,但是我还建议您重新考虑如何命名变量,特别是在每个变量名称后加上“ _”下划线。遵循某种流行的python样式指南(例如Google的here)是一个好主意,主要有两个原因:

  1. 其他人已经很熟悉了,因此阅读起来更容易
  2. 这是一种流行的风格指南,因为它自然易读

答案 2 :(得分:-1)

我将利用while循环来遍历列表列表。这是一个示例,但是可以代替列表语句来更改列表元素。

a = [1,2,3] #example elements
b = [4,5,6]
c = [7,8,9]
lists_ = [a,b,c] 


new_lists_ = [] 
i = 0
while i < len(lists_):
        for x in lists_[i]:
            print(x) 
        i+=1

这将输出1-9,因为已经检查了每个元素。