【问题标题】:Change an element of an array using a for loop in Python在 Python 中使用 for 循环更改数组的元素
【发布时间】:2012-05-20 06:23:09
【问题描述】:

我正在尝试自学 Python,并正在用它做一些琐碎的任务。目前我正在处理列表和字符串。我知道字符串是不可变的,所以我将字符串转换为列表并希望遍历列表以将任何元音更改为 $ 符号。问题是 $ 符号没有归因于元音。这是我的代码:

aString = raw_input("Please enter a sentence: ")

aString = list(aString)

for i in xrange(len(aString)):
    if i=='a' or \
       i=='e' or \
       i=='i' or \
       i=='o' or \
       i=='u':
        i.newattribute = '$'

print aString

【问题讨论】:

  • xrange 生成整数,而不是字符 :-)
  • @MaksymPolshcha 谢谢。必须对 Python 中的循环等进行更多研究。他们有很多东西
  • 感谢大家的帮助!

标签: python string list for-loop


【解决方案1】:

如果您正在学习 Python,可以使用的一个很酷的功能是列表推导式。你可以这样做:

>>> str = "hello world"
>>> l = ["$" if ch in "aeiou" else ch for ch in str]
>>> str = "".join(l)
>>> str
'h$ll$ w$rld'

第二行构建一个列表,遍历每个字符并应用 `"$" if ch in "aeiou" else ch1 到它。然后,您只需加入列表即可获取新字符串。它正在做你想做的事情,将字符串转换为列表,并在此过程中将元音转换为“$”。

这当然不是最有效的方法。最好的方法是使用其他人提到的用于此类事情的库。

【讨论】:

  • 您实际上不需要单独创建一个列表,您只需将其更改为生成器表达式并将其放在"".join() 中即可。
【解决方案2】:

“Pythonic”方式是对字符串使用 translate 方法。
示例:

import string
mystr="hello world"
vowels="aeiou"
token="$"*len(vowels)
tab=string.maketrans(vowels,token)
mystr.translate(tab)
'h$ll$ w$rld'

【讨论】:

    【解决方案3】:
    strs="abcduitryd"
    print("".join(('$' if x in 'aeiou' else x for x in strs)))
    
    $bcd$$tryd
    

    或:

    strs="abcduitryd"
    lis=list(strs)
    for i,x in enumerate(lis):
        if x in 'aeiou':
            lis[i]='$'
    strs="".join(lis)
    print(strs)
    
    $bcd$$tryd
    

    或:

    strs="abcduitryd"
    for i,x in enumerate(strs):
        if x in 'aeiou':
            strs=strs.replace(strs[i],'$')
    print(strs)
    
    $bcd$$tryd
    

    【讨论】:

    • 您不必list() 字符串。字符串是可迭代的。
    • 哦!当我从 IDE 复制此行时,我忘记删除该行。
    【解决方案4】:

    我知道你这样做是为了学习语言,但你应该知道你可以简单地使用方法sub 替换为正则表达式:

    import re
    re.sub('[aeiou]', '$', aString)
    

    【讨论】:

      【解决方案5】:

      您想要执行以下操作:

      for i in xrange(len(aString)):
          if aString[i]=='a' or \
             aString[i]=='e' or \
             aString[i]=='i' or \
             aString[i]=='o' or \
             aString[i]=='u':
                aString[i] = '$'
      

      但是使用替换方法可能会更容易。

      replaceList = ['a', 'e', 'i', 'o', 'u']
      aString = raw_input("Please enter a sentence: ")
      for letter in replaceList:
          aString.replace(letter)
      print aString
      

      【讨论】:

      • 替换功能是我以前没见过的。谢谢你的尼克。 Python 充满了这些我以前从未见过的新功能。我只熟悉C和C++
      猜你喜欢
      • 1970-01-01
      • 2021-11-02
      • 2014-11-11
      • 1970-01-01
      • 2021-11-22
      • 2021-02-08
      • 1970-01-01
      • 2020-01-12
      • 2021-01-23
      相关资源
      最近更新 更多