【问题标题】:Assigning sub-lists of a list a name more efficiently更有效地为列表的子列表分配名称
【发布时间】:2016-12-20 10:19:10
【问题描述】:

我已经为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: ???

【问题讨论】:

  • 作业左侧是否也需要自动化?左侧很简单,因为 Python 会自动为您完成

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


【解决方案1】:

您可以使用 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

【讨论】:

  • @AriGold 这无济于事,关键是要截断列表,因此只要分配给变量的数量(即 20)。如果large_list 大于 20,那么您希望将其减少到 20 项。
  • 为什么需要list(range(100))?没有它似乎也能正常工作。
  • 我使用的是 Python 3。虽然您可以切片 range 对象,但 OP 要求提供一个列表。所以它可以在没有list 的情况下工作,但它更接近于它的问题。在 Python 2 中,range() 返回一个列表。转换成列表并没有什么坏处。
【解决方案2】:

我会为此使用字典

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

你也可以使用字典理解:

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))

【讨论】:

  • 同意字典是去这里的正确方式,但你可以简单地使用dict(zip(li,large_list))
  • 正确,我会将其添加到答案中,谢谢@Chris_Rands
  • 为什么在这种情况下字典覆盖列表?
  • @BenF97 字典是为此构建的,请参阅stackoverflow.com/questions/5036700/…
【解决方案3】:

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 个项目。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-11-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-04
    相关资源
    最近更新 更多