【问题标题】:Concatinating strings to list items using for loops in python使用python中的for循环连接字符串以列出项目
【发布时间】:2020-08-07 13:32:34
【问题描述】:

我是python3的新手,最近一直在练习列表和函数。

在这里,我将字符串存储在一个列表中,然后将该列表传递给一个应该连接/添加字符串的函数,如下所示:

def hello(names):
    for name in names:
        name = "Hello "+name+"!"
    return names


liiist = ["L Lawliet", "Nate River", "Mihael Keehl"]
liiist = hello(liiist)
print(liiist)

但不是得到 ['Hello L Lawliet!', 'Hello Nate River!', 'Hello Mihael Keehl!'],我只收到['L Lawliet', 'Nate River', 'Mihael Keehl'] 什么都没发生。另外,PyCharm 提醒我 Local variable 'name' value is not used

我也尝试过这个问题,结果发现它在函数之外也不起作用

vars = ["trying", "to", "rewrite", "lists"]
for var in vars:
    var = var + " hello"
print(vars)

输出:['trying', 'to', 'rewrite', 'lists']

我已经找到了解决这个问题的方法,但我很不高兴我只是偶然/大量的反复试验找到了解决方案。 我想我不明白为什么 python 产生这样的结果可能会影响我以后的职业生涯。有人可以解释为什么会发生这种情况吗?

另外,如果你好奇,这里是我找到的解决方法:

def hello(names):
    counter = 0
    for name in names:
        name = name + " the Great"
        names[counter] = names
        counter += 1
    return names

names = ["L Lawliet", "Nate River", "Mihael Keehl"]
names = hello(names)
print(names)

给我一​​个比上面那个更有效的代码也可以帮助:)

【问题讨论】:

    标签: python-3.x list string-concatenation


    【解决方案1】:

    获得上述输出的一种方法是附加到@Andrej Kesely 上面提到的列表中。另一种方法是使用输出序列的“yield”生成器。参考以下代码。

    def hello(names):
        for name in names:
            name = "Hello "+name+"!"
            yield name     # generator that outputs sequence. Yield should be inside loop
    
    liiist = ["L Lawliet", "Nate River", "Mihael Keehl"]
    liiist = list(hello(liiist))     # store the yield output in a list when calling the function
    print(liiist)
    

    请参阅下面的输出快照

    【讨论】:

      【解决方案2】:

      你的功能

      def hello(names):
          for name in names:
              name = "Hello "+name+"!"
          return names
      

      实际上什么都不做,因为 Python 中的字符串是不可变的。一种解决方案是返回包含新创建的字符串的新列表,例如:

      def hello(names):
          rv = []
          for name in names:
              rv.append("Hello "+name+"!")
          return rv
      
      
      liiist = ["L Lawliet", "Nate River", "Mihael Keehl"]
      liiist = hello(liiist)
      print(liiist)
      

      打印:

      ['Hello L Lawliet!', 'Hello Nate River!', 'Hello Mihael Keehl!']
      

      或者您可以就地更改列表(但在这种情况下,您的函数不会返回任何内容):

      def hello(names):
          for i, name in enumerate(names):
              names[i] = "Hello "+name+"!"
      
      liiist = ["L Lawliet", "Nate River", "Mihael Keehl"]
      
      hello(liiist)
      print(liiist)
      

      打印:

      ['Hello L Lawliet!', 'Hello Nate River!', 'Hello Mihael Keehl!']
      

      【讨论】:

        猜你喜欢
        • 2018-07-19
        • 1970-01-01
        • 1970-01-01
        • 2017-01-30
        • 2015-12-16
        • 1970-01-01
        • 2021-12-24
        • 1970-01-01
        • 2017-12-18
        相关资源
        最近更新 更多