【问题标题】:Python: Replacing chars in an arrayPython:替换数组中的字符
【发布时间】:2020-09-26 09:59:42
【问题描述】:

我有一个关于 Python 中的数组的问题。所以我必须在数组内部替换彼此相邻的字符。例如(假设输入将是 Mike):

stack = []
word = input("Type Your word here: ")
wordChars = list(word)

for i in range(len(wordChars)):
    stack.append(wordChars[i])

print(stack)

result: ['M', 'i', 'k', 'e']

所以,当我有偶数个字符时 - 我需要替换邻居,所以:

'M' 和 'i' 等等:'iMek'。

同样的事情,奇数个字符但最后一个数字保持不变,所以对于“情人”: 'L' 与 'o' 以此类推;然后 'r' 留在最后:'oLevr'。

我知道如何用模查找单词是偶数还是奇数,但仍然不知道如何替换邻居。

【问题讨论】:

  • 仅供参考,如果您意识到:wordCharsstack 始终相同。
  • 你能发布一些代码吗?您可以通过遍历数组并替换另一个数组中的字符来实现此目的。

标签: python arrays list arraylist


【解决方案1】:

您可以编写一个替换数组中 2 个索引的函数:

def replace(arr, i, j):
    tmp = arr[i]
    arr[i] = arr[j]
    arr[j] = tmp

现在您可以查看列表并替换每 2 个邻居:

for i in range(0, len(wordChars) - 1, 2):
    replace(wordChars, i, i + 1)

正如 DarrylG 所说,在 python 中,您可以通过执行以下操作交换 2 个元素:

arr[i], arr[j] = arr[j], arr[i]

因此,使代码更简单:

for i in range(0, len(wordChars) - 1, 2):
    arr[i], arr[j] = arr[j], arr[i]

【讨论】:

  • 在函数替换中,在 Pythong 中交换值很常见:arr[i], arr[j] = arr[j], arr[i]
  • 是的,我现在可以看到。不知道这种与 2 个元素的交换。现在这对我来说很有意义。谢谢大家。
【解决方案2】:

使用此代码执行此操作 -

def is_even(stack):
        for i in range(0, len(stack), 2):
            temp = stack[i]
            stack[i] = stack[i+1]
            stack[i+1] = temp
        return stack

def is_odd(stack):
    for i in range(0, len(stack - 1), 2):
        temp = stack[i]
        stack[i] = stack[i+1]
        stack[i+1] = temp
    return stack

stack = []
word = input("Type Your word here: ")
wordChars = list(word)

for i in range(len(wordChars)):
    stack.append(wordChars[i])

print(stack)
if len(stack) % 2 == 0:
    new_stack = is_even(stack)
else:
    new_stack = is_odd(stack)

【讨论】:

    【解决方案3】:

    你可以一次取两个字母并像下面这样迭代:

    length = len(stack)
    for i in range(0,length,2):
      if(i+1 >= length ):
          break
      temp = stack[i]
      stack[i] = stack[i+1]
      stack[i+1] = temp
    

    【讨论】:

      【解决方案4】:
      a = ['L', 'o', 'v', 'e', 'r']
      for i in range(0,len(a)-1,2):
          a[i], a[i+1] = a[i+1], a[i]
      
      print(a)
      

      【讨论】:

      • 我尝试了非常相似的想法,但无法正确解决。现在我可以看到我做错了什么。谢谢!
      • @k2a — 非常好!
      【解决方案5】:

      不用想太多,循环(基于你所说的模数)并执行以下操作:

      for x in range(0, len(wordChars) % 2, 2):
          char_a       = stack[i]
          char_b       = stack[i + 1]
          stack[i]     = char_b
          stack[i + 1] = char_a
      

      这基本上会以 2 为增量在列表中前进,因此每个增量都会交换项目 0 和 1、2 和 3、4 和 5 等。

      【讨论】:

        【解决方案6】:

        list.pop(0) 的替代方法

        def flip(a):
        
            #convert input string to list
            lst = list(a)
        
            #initialise output string
            out = ''
        
            # if more than 1 element is left, remove the first two elements and invert
            while len(lst)>1:
                a = lst.pop(0)
                b = lst.pop(0)
                out = out + b + a
        
            # if list has at least one element, add this one to the output string
            if lst:
                out = out + lst.pop()
        
            return out
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2010-09-28
          • 1970-01-01
          • 2017-12-17
          • 1970-01-01
          • 2013-11-08
          • 1970-01-01
          • 2012-10-30
          相关资源
          最近更新 更多