更有效地为列表的子列表分配名称

时间:2016-12-20 10:19:11

标签: python python-2.7 list loops for-loop

我已为sub lists分配了large list名称,如下所示:

AB, CD, EF, GH, IJ, KL, MN, OP, QR, ST, UV, WQ, YZ, AA, BB, CC, DD, EE, FF, GG = large_list[0], large_list[1], large_list[2], large_list[3], large_list[4], large_list[5], large_list[6], large_list[7], large_list[8], large_list[9], large_list[10], large_list[11], large_list[12], large_list[13], large_list[14], large_list[15], large_list[16], large_list[17], large_list[18], large_list[19]

这看起来非常不实用,因此想知道是否有一种方法被认为更有效甚至更短。

我假设某种形式的循环有帮助吗?例如for sub_list in large_list: ???

3 个答案:

答案 0 :(得分:2)

您可以使用Python的解包功能:

L = list(range(10))
a, b = L[:2]

对于你的情况:

AB, CD, EF, GH, IJ, KL, MN, OP, QR, ST, UV, WQ, YZ, AA, BB, CC, DD, EE, FF, GG  = large_list[:20]

为了更好的可读性,您可以使用括号来打破行:

large_list = list(range(100))
(AB, CD, EF, GH, IJ, KL, MN, OP, QR, ST, UV, WQ, 
 YZ, AA, BB, CC, DD, EE, FF, GG)  = large_list[:20]

现在AB0GG19

答案 1 :(得分:1)

我会使用字典

li = ["AB", "CD", "EF", "GH", "IJ", "KL", "MN", "OP", "QR", "ST", "UV", "WQ", "YZ", "AA", "BB", "CC", "DD", "EE", "FF", "GG" ]
dicti = {}
for subList,key in zip(large_list,li):
  dicti[key] = subList

你也可以使用dict理解:

li = ["AB", "CD", "EF", "GH", "IJ", "KL", "MN", "OP", "QR", "ST", "UV", "WQ", "YZ", "AA", "BB", "CC", "DD", "EE", "FF", "GG" ]
dicti = dicti = {key: sub_ist for key, sub_ist in zip(li, large_list)}

Chris_Rands在评论中写道,你可以这样做:

dict(zip(li,large_list))

答案 2 :(得分:1)

Python有一个叫做元组解包的东西,你可以从集合中分配多个值。它“打开”集合将其变成所有部分。这是一个简单的例子:

numbers = [1, 2, 3]
a, b, c = numbers
# a, b, c = [1, 2, 3]
# a = 1, b = 2, c = 3

所以你可以通过右边的列表名称来实现你的方法:

AB, CD, EF, GH, IJ, KL, MN, OP, QR, ST, UV, WQ, YZ, AA, BB, CC, DD, EE, FF, GG = large_list

虽然large_list中的项目数量多于或少于您指定的项目,但您会收到错误。 (即如果large_list有21个项目,但你试图分配给20个)。您可以使用large_list[:20]至少只占用列表中的前20个项目来缓解它过大。