从文本python中检索列表中的事件

时间:2017-10-12 06:16:54

标签: python

Text = input('please enter your text')
l = [str(x) for x in Text.split()]
count = 0
for item in l:
    for i in range(1,len(item)):
        if item[i-1] == item[i]:
            count +=1
    if count <1:
        l.remove(item)
    count = 0
print (l)

目标是:如果我们有一个文字:&#39; baaaaah mooh lpo mpoo&#39;获得一个包含2个连续相同字符的元素的列表,在这种情况下[&#39; baaaaah&#39;,&#39; mooh&#39;,&#39; mpoo&#39; ]

该程序正在使用上述示例

如果我使用这个它不起作用:&#39; hgj kio mpoo&#39;

谢谢

2 个答案:

答案 0 :(得分:1)

(复杂)单线:

>>> def successive_items(s):
        return [x for x in s.split() if any(x[i]==x[i-1] for i in range(1,len(x)))]

>>> successive_items('baaaaah mooh lpo mpoo')
['baaaaah', 'mooh', 'mpoo']
>>> successive_items('hgj kio mpoo')
['mpoo']

如果是您的代码,则不应修改您正在迭代的列表。比方说,让我们有一个数组:

a = [1,2,3,4,5]

现在,如果你迭代并删除元素(在循环内),你会期望a为空。但是,让我们看看:

>>> a = [1,2,3,4,5]
>>> for item in a:
        a.remove(item)

>>> a
[2, 4]

请参阅?它不是空的。这可以更好地解释here

由于列表修改,您的程序不适用于第二种情况。方法如下:

  1. 最初,您的列表中包含['hgj','kio','mpoo']
  2. 阅读第一个元素后,您删除了hgj。所以列表现在变为['kio','mpoo']
  3. 循环接下来迭代第二个元素,它得到mpoo(在修改后的列表中);
  4. kio从未被阅读。

答案 1 :(得分:0)

这可能会有所帮助:

sentence = input("please enter your text")

words = sentence.split()

answers = []
for each_word in words:
    for idx in range(1, len(each_word)):
        if each_word[idx] == each_word[idx-1]:
            answers.append(each_word)
            break

print(answers)

在您的代码中,您正在迭代列表,同时修改相同的列表(通过删除其中的元素),有关更多说明,请参阅this answer