我正在尝试制作一个脚本,以查找包含我的语言的所有单词(每行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
但是,似乎文件中的第一个单词(单词中没有倒序)之后会停止迭代。
有人知道我该如何解决吗?
答案 0 :(得分:3)
问题在于word
是一个迭代器,而支票reverse in words
耗尽了它。因此,对于for
循环的下一次迭代,没有其他可用元素(迭代器已用尽),因此它停止了迭代。
您可以改用list
或set
:
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)