在文件中搜索反向字符串

时间:2019-03-21 22:35:44

标签: python for-loop

我正在尝试制作一个脚本,以查找包含我的语言的所有单词(每行1个单词)的文件,读取并检查该文件中的每个单词是否在文件中都是反向的,基本上是回文和半回文症

words = open('AllWords.txt', 'r')

for line in words:
    reverse = line[::-1]
    if reverse in words:
        print(reverse)
    if reverse not in words:
        continue

但是,似乎文件中的第一个单词(单词中没有倒序)之后会停止迭代。

有人知道我该如何解决吗?

3 个答案:

答案 0 :(得分:3)

问题在于word是一个迭代器,而支票reverse in words耗尽了它。因此,对于for循环的下一次迭代,没有其他可用元素(迭代器已用尽),因此它停止了迭代。

您可以改用listset

words = set(map(str.rstrip, open(...).readlines()))

然后按照您的指示执行其余代码。

如果顺序很重要,则可以使用list进行迭代,并使用set进行检查(集合的成员资格测试为O(1)):

with open(...) as fh:
    words = [x.rstrip() for x in fh]
word_set = set(words)
for word in words:
    if word[::-1] in word_set:
        print(word)

您也可以使用两组,因为回文集是两组之间的交集,一组用于单词,另一组用于反向单词:

with open(...) as fh:
    words = set(map(str.rstrip, fh))
words_reversed = set(x[::-1] for x in words)
palindromes = words & words_reversed

答案 1 :(得分:0)

public String doInBackground(String... numbers) {
  String companyNumber = numbers[0];
  // companyNumber now contains company1.getCompanyNumber()
}

答案 2 :(得分:0)

如果文件中包含大量单词,则该过程将非常缓慢。使用set操作可以更快地获得结果:

words = open("Allwords.txt").read().split("\n")
palindromes = set(words).intersection(w[::-1] for w in words)
for palindrome in palindromes: print(palindrome)