【问题标题】:How to create the following lists with list comprehensions? [closed]如何使用列表推导创建以下列表? [关闭]
【发布时间】:2020-02-12 11:53:26
【问题描述】:

如何在 python 中使用列表推导式创建以下列表:

list1 = [0,0,0,0,0,1,1,1,1,1,2,2,2,2,2,.........n,n,n,n,n]
list2 = [1,2,3,4,5,1,2,3,4,5,1,2,3,4,5...................]

list1 中,每个数字重复5 次。
list2 有5*n 个元素,其中n 是用户定义的。

只是好奇这是否可以使用列表推导式。

list1=[]
x=0
for i in range(5*n):
    if i%5==0 and i>0 :       
       x+=1
    list1.append(x)

【问题讨论】:

  • 你尝试了什么,有什么不足?
  • 欢迎来到 SO。这不是讨论论坛或教程。请使用tour 并花时间阅读How to Ask 以及该页面上的其他链接。

标签: python python-3.x list list-comprehension


【解决方案1】:

避免(显式)嵌套循环:

  1. sum([[x]*5 for x in range(1,n+1)],[]) (根据@StevenRumbalski 的建议,更好的方法是itertools.chain(*[[x]*5 for x in range(1,n+1)]),它会产生你想要的值的可迭代。)

  2. [x for x in range(1,6)]*n

【讨论】:

  • @chepner:没有关于如何使用它的信息(如果有的话),很难评估问题的可能性。
  • 让我更直截了当。由于其性能特征,在 Python 中添加带有 sum 的列表对我来说是一种代码味道。 documentation 似乎暗示了同样的说法,即 sum 通常用于数字,然后提供了如何不将 sum 用于其他常见类型的示例,包括可迭代对象。有人可能会说这是过早的优化,但是当存在其他同样明确的替代方案时,为什么要编写可以咬你的代码呢?
【解决方案2】:

您的第一个问题: [i for i in range(n) for j in range(5)]

您的第二个问题: [j for i in range(k) for j in range(1,6)]

其中k 是重复次数

【讨论】:

  • 第一[i for i in range(n) for j in range(5)]
  • @splash58 是的,我不小心把它从 1 读到 n,对此感到抱歉 :),谢谢
  • 好像,第二个应该是[j for i in range(n) for j in range(1,6)]
  • @splash58 作为他的测试用例显示我不知道 :)
  • @StevenRumbalski 是的,我错了 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-02-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多