【问题标题】:How to replace all elements in list 1 with all elements from list 2 in defined function Python3如何在定义的函数Python3中用列表2中的所有元素替换列表1中的所有元素
【发布时间】:2018-04-16 15:02:42
【问题描述】:

我有 2 个列表和准备好的函数传递和打印。我可以分别用第二个列表的每个元素替换第一个列表的每个元素,但我不确定如何在一个函数中一起完成。我已经在 stackoverflow 上搜索了几个小时的答案,但是这里关于这个主题的所有 python 东西都太旧了,并且与 python 3.6 不兼容。我希望你能在不使用任何导入方法(例如 if/elif 或其他方法)的情况下给我一个提示。这是我目前所拥有的:

    def goodbadString(string):
    for (a,b) in zip(strings, expectedResults):
        string = string.replace(strings[0],expectedResults[0])
    return string

strings = ['It has been a good and bad day', 'bad company',
           'good is as good does!', 'Clovis is a big city.']
expectedResults = ['I am confused', 'goodbye', 'hello',
                   'hello and goodbye']
for string, expectedResult in zip(strings, expectedResults):
    print('Sample string = ', string)
    print('Expected result =', expectedResult)
    print('Actual result =', goodbadString(string))
    print()

这是预期结果(虽然不是全部结果

您可以看到我的函数确实为第一个“示例字符串”显示了正确的结果,但现在我应该继续处理其余元素(第二个示例“再见”的实际结果等等)。

【问题讨论】:

  • 它不起作用,因为您只明确引用第一个元素 - string.replace(strings[0],expectedResults[0]),所以无论您有多少数据,您总是使用每个列表中的第一个元素。我建议您停止在 Internet 上搜索答案,而是仔细考虑您的代码或使用调试器运行它,一步一步看看发生了什么。
  • @BorisSerebrov 是的,它明确适用于第一个元素,因为我没有完成其余部分。我试过了,它会给我其中一个元素,但不是全部。我不确定如何继续我的函数更正(语法)它将包含所有 3 个元素。
  • @BorisSerebrov 我特别喜欢你最后的建议。
  • @Rish 这是一个学习练习吗?我只是不确定在这里给出直接答案是否会帮助您实际学习一些东西。也许尝试在您的goodbadString 函数中使用ab。您也可以尝试不使用for 循环(您可以使用 list.index() 方法)
  • @Rish 好的,所以你的 for 循环也适用于 string = string.replace(a, b),但 strings.index 更清晰,可能更快。

标签: python list function replace python-3.6


【解决方案1】:

我不确定你到底想要goodbadString() 做什么。这是一个尝试:

def goodbadString(string):
    idx = strings.index(string)
    return string.replace(strings[idx],expectedResults[idx])

Sample string =  It has been a good and bad day
Expected result = I am confused
Actual result = I am confused

Sample string =  bad company
Expected result = goodbye
Actual result = goodbye

Sample string =  good is as good does!
Expected result = hello
Actual result = hello

Sample string =  Clovis is a big city.
Expected result = hello and goodbye
Actual result = hello and goodbye

这实际上很愚蠢......只需返回预期的字符串而无需替换任何内容:

def goodbadString(string):
    return expectedResults[strings.index(string)]

【讨论】:

  • 这正是我所需要的。太糟糕了,我们还没有研究“idx”。我认为会有更长的代码。也许有一本好书可以让我学习更复杂的练习?非常感谢您的建议。
  • 哇,您添加的最后一部分非常简单,而且全部完成!如您所见,我对编码非常陌生...
  • 就个人而言,我有点反对书籍,尤其是关于 Python 的书籍(相反,例如关于算法的书籍)——Python 有很好的文档记录,网上有很多例子。我认为最好的方法是尝试为自己编造一些(无论多么愚蠢/愚蠢)的问题,并尝试解决它们并改进它们。特别是,请尝试遵循@BorisSerebrov 的建议“...仔细考虑您的代码或使用调试器运行它,一步一步看看发生了什么。” 您可以用简单的print 语句替换调试器目前。只是不要太早放弃并坚持下去。
  • @Rish 添加到我之前的评论...在我看来,仔细考虑您的代码是最重要的事情。实际上,您成为自己的编译器/解释器。
  • 哦,我很固执,通常我会想办法:)
猜你喜欢
  • 2021-01-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-17
  • 2013-05-28
  • 1970-01-01
  • 2021-04-03
相关资源
最近更新 更多