我具有以下结构,
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
^这会将所有项目添加到所有列表中,所以不是我想要的。
自然,我可以单独访问每个列表并以这种方式进行迭代,但是我觉得这不是一个好习惯。我不确定上述做法是好是坏,因此,请多多指教。
(也是我的第一个非熊猫问题,所以我想这是一个里程碑。.?!)
答案 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)是一个好主意,主要有两个原因:
答案 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,因为已经检查了每个元素。