【问题标题】:How to pass a variable to a function in Python如何将变量传递给Python中的函数
【发布时间】:2020-05-20 19:19:25
【问题描述】:

我是新手,也是我的第一篇文章,所以请原谅任何违反协议或新手编码错误:)

使用 Python 3.7 代码。

赋值:在字符串中查找一个字符,并在找到的字符前添加一系列字符。该字符在字符串中出现多次。 方法:

将字符串加载到变量中:

如果在变量中找到字符,则将此变量和字符传递给返回字符索引的函数。

遍历索引以添加一系列字符

def find_indices_of(char, in_string):
    index = -1
    print(index)
    while True:
        index = in_string.find(char, index + 1)
        if index == -1:
            break
        yield index
var1 = "abcabcabc"
for i in find_indices_of('b', var1):
        var1 = var1[:i] + 'XY' + var1[i:]

问题:对于第一次发生函数调用时的循环的第一次迭代,函数被赋予变量(var1)作为常量,并返回一组常量索引。但是迭代中的逻辑是向变量添加一系列字符。每次调用函数时,这个更新的变量都不会传递给函数。结果,字符的索引没有更新,因此循环的进一步迭代正在使用旧的索引值。这会导致在不需要的索引处添加一系列字符。

期望的输出: aXYZbcaXYZbcaXYZbc

实际输出:

aXYZbXYZcXYZabcabc

我正在努力将更新后的变量作为参数提交给函数:find_indices_of 以获得正确的索引。我还需要该函数在返回更新的索引之前省略先前出现的字符。有没有办法做到这一点?

【问题讨论】:

  • 是的,有办法。
  • @AryaMcCarthy:你可以和我分享一下吗?

标签: string python-3.7


【解决方案1】:

find_indices_of(char, in_string) 函数被调用时,你在做什么 它返回所有索引的列表。当您对其进行迭代并更新 var1 的值时,很明显在第一次迭代后第二个 'b' 的索引将被更改。它与 find_indices_of 函数返回的 b 不同,因为您在 'b' 第一次出现之前添加了一些字符,所以第二个 'b'将被转移到更高的索引,但在列表中它具有先前的位置,因此只需以 reverse order 迭代列表,它不会改变其他字符的位置。

for i in reversed(find_indices_of('b', var1)):
        var1 = var1[:i] + 'XY' + var1[i:]

这是您所需逻辑的基本实现

def find(char, in_string):
    return [i for i, c in enumerate(in_string) if c == char]

var1 = "abcabcabc"
all_index = find('b',var1)
for i in reversed(all_index):
    var1 = var1[:i] + 'XYZ' + var1[i:]
print(var1)

输出将如下所示

 desired Output:aXYZbcaXYZbcaXYZbc 
 Actual Output: aXYZbcaXYZbcaXYZbc

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-13
    • 2020-05-20
    • 2022-01-14
    • 1970-01-01
    • 2020-12-20
    相关资源
    最近更新 更多