[英]How to find and remove pairs of strings with a given total letters count from a list
我有一个列表,每个元素都是一个单词。 在这个列表中,我想找到添加字母数为 20 的单词对,打印它们并将它们从列表中删除。
当列表中没有匹配条件的单词时,程序应该停止。
这是我想出的代码,但正如您将看到的,它有很多错误,索引超出范围,我不知道如何修复它,也不知道如何让程序在那里停止不再有符合条件的词。
f = open('input.txt', 'r')
words = f.read().split()
c = 0
for word in words:
c += 1
for i in range(c):
letterCount = 0
for letter in words[i]:
letterCount += 1
for j in range(i+1, c):
letterCount2 = 0
for letter in words[j]:
letterCount2 += 1
if letterCount + letterCount2 == 20:
print(words[i], words[j])
words.pop(i)
words.pop(j)
这是我的建议。 您必须使用 len(list) 或 len(word) 来获取单词列表的长度,这将使您的生活更轻松。 在下面的代码中,我们创建了一个 function 来检查此类单词对并删除它们。 我们运行这个 function 直到没有其他对并且循环停止:
f = open('input.txt', 'r')
words = f.read().split()
def find_pair(l):
for i in range(len(l)-1):
for k in range(i, len(l)):
if len(l[i]+l[k])==20:
return (i, k)
return (0,0)
while True:
x=find_pair(words)
if x!=(0,0):
words.pop(x[1])
words.pop(x[0])
else:
break
print(words)
使用break;
满足条件后退出循环的语句
一个简单的解决方案,无需更改您的单词列表:
pairs=[]
for w1 in words:
for w2 in words:
if w1 in pairs or w2 in pairs:
continue
if w1 != w2 and len(w1) + len(w2) == 20:
print(w1, w2)
pairs.append(w1)
pairs.append(w2)
break
print(pairs)
print(list(filter(lambda x: x not in pairs, words)))
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.