gpt4 book ai didi

python - 严重难以捉摸的循环(绞尽脑汁!)

转载 作者:太空宇宙 更新时间:2023-11-04 09:13:15 24 4
gpt4 key购买 nike

我在 Python 2.72 中遇到了一个循环问题,这让我非常沮丧。基本上循环不会在第一个索引 j 上迭代,我已经尝试了各种方法来修复它,但没有成功。

def learn(dataSet):
for i in dataSet.getNext():
recall = raw_input("Enter all members of %s you are able to recall >>> (separated by commas) " % (i.getName()))
missed = i.getMembers()
missedString = []
for a in missed:
missedString.append(a.getName())

这是我无法迭代的循环。第一个 for 循环仅遍历拆分字符串列表中 j 的第一次迭代,然后将其从 missedString 中删除。我希望从 missedString 中删除拆分字符串 recall 的所有成员。

for j in string.split(recall, ','):
if j in missedString:
missedString.remove(j)
continue
for b in missed:
if b.getName() not in missedString:
missed.remove(b)
print 'You missed %d. ' % (len(missed))
if (len(missed)) > 0:
print 'Maybe a hint or two will help...'
for miss in missed:
remind(miss.getSecs(), i.getName(), missed)

如何修复上面的代码?

最佳答案

missedString 对于 list

来说是个糟糕的名字

请注意,您可以在几个地方简化代码

        missedString = []       
for a in missed:
missedString.append(a.getName())

可以用列表理解代替

        missedString = [a.getName() for a in missed]

在这里你应该只使用recallsplit方法而不是string.split)。看起来好像这个循环应该嵌套在 for i 循环中,所以我假设它是(如果不是,您将对错误的数据集使用错误的召回值)。

for j in string.split(recall, ','):
if j in missedString:
missedString.remove(j)
continue

也可以用列表推导代替。

recall_set = set(recall.split(','))
missedString = [j for j in missedString if j not in recall_set]

如果例如,这将无法正常工作。用户在输入中输入了额外的空格,因此最好strip()那些元素

recall_set = set(s.strip() for s in recall.split(','))
missedString = [j for j in missedString if j not in recall_set]

这个循环有一个严重的问题。一般来说,从您正在迭代的列表中删除元素不是一个好主意。你最终会跳过一些元素而不检查它们

for b in missed:
if b.getName() not in missedString:
missed.remove(b)

也许列表理解可以再次提供帮助

missed = [b for b in missed if b.getName() in missedString]

关于python - 严重难以捉摸的循环(绞尽脑汁!),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12558516/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com