【问题标题】:To Remove consecutive vowels from string从字符串中删除连续元音
【发布时间】:2019-08-23 17:22:06
【问题描述】:

在这里,我想删除所有连续重复的元音。但它显示错误为“list out of index”。

因此,如果到达列表中的最后一个元素,我尝试了 break,但仍然无法正常工作。

这是我试过的代码:-

a=[]

b=str(input("enter the string"))

a=b.split(',')

c=['a','e','i','o','u']

for i in c:

    for j in range(0,len(a)):

        if (a[j+1] == a[len(a)]) is True:

            break;

        elif ((a[j] == a[j+1]) & (a[j+1] == i)) is True:

                del[j]
e.join(a)

print(e)        

请告诉我如何解决这个问题,或者如果存在任何其他问题。

【问题讨论】:

  • 你好。欢迎。你不应该只说“它不起作用”,你应该包括所有必要的输入。提供您的意见,描述您期望发生的事情,然后描述发生的事情有何不同。
  • 什么是e?如果需要完整的解决方案,请尝试包含任何必需的信息,否则请删除任何对您的问题不必要的信息。

标签: python string list duplicates


【解决方案1】:

如何为连续的元音保持堆栈?每当您看到非元音字符串时,重新初始化堆栈列表,当您看到元音但不连续时,您只需添加到最终列表中

stack=[]
new_list=[]
vowel=['a','i','o','u','e']
for i in your_string: # replace your string with actual string
    if i not in vowel:
        if len(stack) == 1:
            new_list.append(stack[0])
        new_list.append(i)
        stack = []
    else:
        stack.append(i)
if len(stack) == 1:
    new_list.append(stack[0])

【讨论】:

    【解决方案2】:

    您得到了一个超出索引错误的列表,因为您的索引值不在a

    if (a[j+1] == a[len(a)]) is True:
    

    a[len(a)] 不存在,数组索引为零,因此它们从 0 开始。包含 5 项的数组的索引为 0,1,2,3,4

    该行应该是:

    if (a[j+1] == a[len(a) - 1]) is True:
    

    'is True' 也是多余的,所以进一步细化:

    if a[j+1] == a[len(a) - 1]:
    

    del[j] 也是一个错误吗?应该是del a[j]? 如果是这种情况,程序将在您遍历数组的整个原始大小但在此迭代期间删除值时遇到更多错误,因此它将查找不再存在的项目。

    【讨论】:

      【解决方案3】:

      第一个细节是:if (a[j+1] == a[len(a)]) is True: 据我了解,这是在必要时破坏代码。但这完全没有必要。相反,您应该在开始时修复迭代次数,应该是 for j in range(0,len(a)-1):

      另一个问题是您并没有真正迭代字母,只是每个逗号分隔的短语。如果你输入“Hello, World”,你不是在检查字母,而是检查“Hello”和“World”。您不妨删除 b 并让 a 成为原始输入。

      因为 a 将是一个字符串,所以要删除字符串的第 i 个字母,您可以使用下面的函数。

      def remove_jth(word, j):
          word = word[:j] + word[j+1:]
      

      最后,由于您使用的是范围,它会在您开始 for 时构建一个大小为 len(a) 的“列表”,但是当您删除元音时,a 的长度会变短,并且您在开始会很多。如果你解决了所有这些问题,你应该做对了

      【讨论】:

        【解决方案4】:

        你可以这样做:

        a=[]
        
        b=str("a,a,a,b,e,e,e,c,x,d")
        
        a=b.split(',')
        
        c=['a','e','i','o','u']
        j = 0
        for i in c:
          while j < len(a)-1:
              if a[j] == a[j+1] and a[j] == i:
                  del a[j]
              else:
                  j = j+1
          j=0
        

        使用while loop 来检查列表并删除连续的重复项。然后将 while 循环重置为零并再次运行列表。

        如果您要删除列表中用于迭代的项目,则使用 for loop 将不起作用。

        b=str("a,a,a,b,e,e,e,c,x,d") 只是用来测试代码。 要打印结果,您只需执行 print(a) 即可将列表打印出来。

        我用过这个Stack Overflow post as reference

        【讨论】:

          【解决方案5】:

          我编辑了它以适合你:

          result=original.replace('a','').replace('e',''),replace('i','').replace('o','').replace('u','')
          
          

          original 是您的输入字符串,result 是您的输出字符串。

          【讨论】:

            【解决方案6】:
            t=input()
            st=""
            vow=['a','e','i','o','u']
            st+=t[0]
            for i in range(1,len(t)):
              if(t[i].lower() in vow):
                if(t[i-1].lower() not in vow and i-1>=0):
                  st+=t[i]
              else:
                 st+=t[i]
            print(st)
            

            【讨论】:

            • 虽然这段代码 sn-p 可以解决问题,但including an explanation 确实有助于提高帖子的质量。请记住,您是在为将来的读者回答问题,而这些人可能不知道您提出代码建议的原因。
            • 虽然这可能会回答问题,但它已被标记为待审核。没有解释的答案通常被认为是低质量的。请提供一些评论,说明为什么这是正确答案。
            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2018-11-23
            • 2021-05-23
            • 1970-01-01
            • 2014-06-04
            • 1970-01-01
            • 2018-08-27
            相关资源
            最近更新 更多