【问题标题】:How to write the replace() function for a list [closed]如何为列表编写 replace() 函数[关闭]
【发布时间】:2017-04-05 10:50:17
【问题描述】:

我是计算机科学学位的第一年,我没有编程背景,所以这可能是一个基本问题。

因此,我们的教授禁止在所有作业中使用 replace() 函数,因为它显然是“作弊”。我正在做一个必须使用替换功能的作业,但由于我不能使用它,我只是创建了一个遍历列表中所有元素的 for 循环。举个例子,如果我想用“5”替换列表中所有出现的“1”,

for number in list_of_numbers:
    if number == "1":
        number = "5"

它完成了它的工作,但我只是好奇是否有一种更有效的方法可以在不使用 replace() 的情况下完成它? 感谢您的帮助。

【问题讨论】:

  • 它没有“完成它的工作”。您的代码完全没有效果。
  • 最好自己做一个函数(你可以叫它my_replace),并尝试弄清楚如何编写替换函数
  • 它完成了它的工作你确定吗?您是否在运行函数后打印 list_of_numbers 以查看列表是否真的发生了变化?
  • 教授禁止使用replace()函数,因为如果你被允许使用它,这将是一个微不足道的任务。

标签: python list replace


【解决方案1】:

你的方式可能是你的教授想要的方式。

您也可以将其设为列表理解。它看起来像这样

def f(x):
    if x=="1": return "5"
    else: return x

list_of_numbers = [f(x) for x in list_of_numbers]

我会确保您所拥有的解决方案会按照您的想法进行。还要确保您确实想要处理数字字符串,而不仅仅是整数本身。

【讨论】:

  • 列表推导不等价,它会创建一个新列表。 OP的方式也行不通,所以可能不是他们教授想要的。
  • 另外,我怀疑是否有人在寻找字符串。它可能应该是整数!
  • 要修正@jonrsharpe 的公平批评,你可以这样做list_of_numbers[:] = [f(x) for x in list_of_numbers]
【解决方案2】:

你可以试试这个。

map(lambda x: '5' if x == '1' else x, list_of_numbers)

顺便说一句,你可以尝试在 python 中学习一些 lambda 和 map 函数。很有用

【讨论】:

  • pythonic 方法是使用列表 comp:['5' if x == '1' else x for x in list_of_numbers]
  • 同样,这创建了一个新列表,而不是就地修改列表,这不是 .replace 所做的。此外,正如 acushner 所说,这将是一个更好的列表理解。
【解决方案3】:

这是教授想要的:

n = len(list_of_numbers)
for i in range(n):
    if list_of_numbers[i]==1: list_of_numbers[i]=5

print (list_of_numbers)

【讨论】:

    【解决方案4】:

    您可以编写如下my_replace 函数(它将n1 替换为列表l 中的n2):

    def my_replace(n1, n2, l):
        for item in l:
            if item == n1:
                l[l.index(item)] = n2
    

    输出:

    >>> list_of_numbers = [1, 2, 3, 1, 3, 4, 4, 5, 2, 1, 8, 7]
    >>> my_replace(1, 5, list_of_numbers)
    >>> list_of_numbers
    [5, 2, 3, 5, 3, 4, 4, 5, 2, 5, 8, 7]
    

    您也可以使用列表推导来避免更新原始列表:

    [x if x != 1 else 5 for x in list_of_numbers]
    

    输出:

    >>> [x if x != 1 else 5 for x in list_of_numbers]
    [5, 2, 3, 5, 3, 4, 4, 5, 2, 5, 8, 7]
    

    【讨论】:

      猜你喜欢
      • 2014-02-15
      • 1970-01-01
      • 2014-05-10
      • 1970-01-01
      • 1970-01-01
      • 2022-06-19
      • 1970-01-01
      • 2021-09-10
      • 1970-01-01
      相关资源
      最近更新 更多