【问题标题】:How to assign a list with a variable to a variable in Python如何将带有变量的列表分配给Python中的变量
【发布时间】:2021-01-12 06:29:49
【问题描述】:

我有一个列表,其中一个元素是一个变量,它可以取 60 到 120 之间的值。

[0, 1, 2, 3, 4, v]

如果我想为 v 范围从 60 到 120 打印此列表:

for v in range(60,121):
    print([0, 1, 2, 3, 4, v])

给出预期的结果。但是,如果我将此列表分配给一个变量,例如:

l = [0, 1, 2, 3, 4, v]

我收到一个错误,因为 v 未定义。如果我尝试为v 分配一个初始值,然后声明该列表,我不会再收到错误,但我会遇到v 已经分配了一个值的列表:

v = 60
l = [0, 1, 2, 3, 4, v]    
for v in range(60,121):
    print(l)

总是产生[0, 1, 2, 3, 4, 60]

我尝试将此列表分配给变量的原因是,我在许多位置以更长的脚本使用此列表,并且我需要使用此列表为 60 到 120 范围内的某些计算执行 for 循环为v。一种解决方案是在每次需要使用列表时都键入它,但是如果我需要更改任何其他列表元素,这需要我替换脚本中此列表的所有出现。

我想我的问题是:有没有办法将包含变量 (v) 的列表作为元素分配给要在整个脚本中使用的变量 (l)?

有没有很好的编程方式来处理这样的事情?

【问题讨论】:

  • 你想要的都是不可能的。当你使用一个变量时,它的值被复制,它不是对变量本身的引用。
  • 除非你使用列表或字典的元素。
  • 您正在寻找一个函数。列表,以及任何真正的东西,都不包含变量。变量用于源代码。您的列表包含对象

标签: python list


【解决方案1】:

定义一个函数。

def mylist(x):
    return [0, 1, 2, 3, 4, x]

for v in range(60, 121):
    print(mylist(v))

【讨论】:

    【解决方案2】:

    您可以这样定义列表:

    l = [0, 1, 2, 3, 4]
    

    并在使用时介绍v

    for v in range(60, 121):
        print(l + [v])
    

    【讨论】:

      【解决方案3】:
      print([1,2,3,4,*range(60,70)])
      

      如果你想存储为变量,那么

      v= [*range(60,70)]
      print([1,2,3,4,v])
      

      如果你不想要嵌套列表,那么:

      c=[1,2,3,4]
      
      
      
      [c.append(i) for i in v ]
      print(c)
      

      或者

      print([1,2,3,4,[i for i in v ]]) 
      

      【讨论】:

      • 检查第二个版本,它返回一个嵌套列表
      • @costaparas 添加为非嵌套
      • print([1,2,3,4,[i for i in v ]]) 甚至使用这个
      【解决方案4】:

      这真的取决于你将如何使用它。如果你想在每个可能的值上评估使用这个列表的东西,那么

      for v in range(60,121):
        l = [0,1,2,3,4,v]
        # code here
      

      如果您只想分配具有特定值的列表,只需执行以下操作

      def l(v):
        return [0,1,2,3,4,v]
      

      【讨论】:

      • 不,不要这样做l = lambda x: [0,1,2,3,4,x]。这违反了官方风格指南。使用lambda 的唯一目的是创建一个匿名 函数,如果你将它分配给一个名称,这将违背目的
      • 我认为使用 lambda 更符合 Python 风格,因为它比使用 def 语法更快地理解了要点。例如,在 javascript 中,很多人使用 func = () => {} 而不是 function func(){},但嘿,这取决于您的个人喜好
      • 你错了。将 lambda 分配给名称是明确违反官方样式指南 PEP8 的。这与现有的“pythonic”的官方定义一样接近。 Python 不是 Javascript,惯用的 Python 代码不像惯用的 JS 代码。惯用的 JS 往往比惯用的 Python 简洁得多。
      • 滥用 lambda。 2 分钟超时。
      • 好吧,我想我刚刚学到了一些新东西,谢谢。我将编辑我的代码,使其符合标准
      【解决方案5】:

      这是另一种解决方案...但我认为除了小脚本之外的任何其他解决方案都是一个糟糕的解决方案。您可以使用标记值代替预期的v。问题是,如果多个代码位同时使用该列表,其中一个会覆盖另一个值,从而破坏所有代码。我将其包括在内是因为它最符合您的原始实验。

      oft_used_list = [0, 1, 2, 3, 4, None]    
      for v in range(60,121):
          oft_used_list[-1] = v
          print(oft_used_list)
      

      【讨论】:

        猜你喜欢
        • 2016-02-10
        • 1970-01-01
        • 2018-08-23
        • 1970-01-01
        • 2017-11-02
        • 1970-01-01
        • 2020-10-08
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多