迭代一组时重复输出

时间:2017-06-20 02:37:02

标签: python-3.x intellij-idea

当我迭代一组字母并删除另一组中包含的字母时,我无法理解为什么我会收到重复输出。

代码

text = set(input("Please enter some text: ").lower())
vowels = {"a", "e", "i", "o", "u", "y", ' '}

for t in text:
    if t in vowels:
        new_text = (text-vowels)
        print(sorted(new_text))

示例:

Please enter some text: camera
['c', 'm', 'r']
['c', 'm', 'r']

2 个答案:

答案 0 :(得分:-1)

打印的次数与文本中非元音的次数相同。

正确的方法

制作该集的副本或单独从文本创建集。

制作套装

的副本
new_set = old_set.copy() #and check the id() values for both here

单独从文本创建一个集

input_ = input("Please enter some text: ").lower()

text = set(input_)
vowels = {"a", "e", "i", "o", "u", "y", ' '}

#To remove the vowel one-by-one by iterating
new_text = set(input_)
for t in text:
    if t in vowels:
        new_text.discard(t) # or remove

一次性打印非元音

print(sorted(new_text))

上一个答案中的错误

  1. 在迭代时删除元素。 Python: Removing list element while iterating over list
  2. 我将text和new_text指向同一个集合。 我们可以通过'is'运算符来确认。

    text is new_text #Returns True

    print(id(text)),print(id(new_text))#具有相同的值,因此更改 一个改变另一个

  3. 上一个答案(不正确)

    text = set(input("Please enter some text: ").lower())
    vowels = {"a", "e", "i", "o", "u", "y", ' '}
    
    #To remove the vowel one-by-one by iterating
    new_text = text
    for t in text:
        if t in vowels:
            new_text.discard(t) # or remove
    
    #To print the non-vowels at one-go
    print(sorted(new_text))
    

答案 1 :(得分:-1)

通过更改集合,输出的工作方式如下......



text = input("Please enter some text: ").lower()
vowels = {"a", "e", "i", "o", "u", "y", ' '}

new_text = set(text)
for t in text:
    if t in vowels:
        new_text.discard(t)

print(sorted(new_text))




...输出



Please enter some text: camera
['c', 'm', 'r']