对于下面的代码,我似乎找不到第三大字。我将从用户输入中得到的字符串拆分并放入“words”变量中,然后创建两个列表,其中一个列表包括按长度排序的单词。你知道吗
然后我得到最长单词的长度(在maxlist
)和第二长单词的长度(在maxlist2
)并删除它们。剩下的应该是原来列表中第三长的单词和任何较短的单词。但我发现这不太管用。你知道吗
下面的第二个和第三个"for"
语句似乎并没有删除由"maxlist"
表示的wordlength
的所有实例
例如,如果我仅用字母“e”来表示单词,并对不同的字长使用不同的e的数字(即ee,eeee,eeee),那么这些实例中的一些会被“For”语句删除,而另一些则不会。对于此输入:
"e ee eee eeee eeee eeee eeee eeee eeee eeee eeee"
我希望所有“eeee”单词都被代码删除:
if len(word) == maxlist:
sort2.remove(word)
如果我为下一个最长的单词重复代码(这是由第三个“for”语句完成的),我还应该删除“eee”实例。但是它们不会被删除,最终的列表仍然是"'e', 'ee', 'eee', 'eeee', 'eeee'"
第二个"for"
语句似乎删除了"eeee"
的6个实例,但不是全部8个实例。这里怎么了?请帮忙!!你知道吗
我的最终输出应该是原始列表中第三长的单词+任何较短的单词。你知道吗
def ThirdGreatest(strArr):
words = strArr.split()
sort=[] # length of words
sort2=[] # actual words
for word in words:
sort2.append(word)
sort.append(len(word))
sort2.sort()
maxlist= len(max(sort2, key=len))
for word in sort2:
if len(word) == maxlist:
sort2.remove(word)
maxlist2 = len(max(sort2, key=len))
for word in sort2:
if len(word) == maxlist2:
sort2.remove(word)
maxlist3 = (max(sort2, key=len))
print
print "biggest word is {} char long ".format(maxlist)
print sort
print "3rd biggest word is {}: ".format(maxlist3)
print "3rd biggest word is {}: ".format(sort2) # list of words remaining
#after the first 2 longest have been removed
ThirdGreatest(raw_input("Enter String: "))
您应该使用^{} 来查找第三大:
之后,你可以使用各种各样的东西,例如列表理解:
您的问题是:
不要更改当前正在迭代的列表,那样只会把事情搞砸。就像你在读一本书,有人在你读的时候撕掉了书页。你知道吗
迭代副本:
请注意添加的
[:]
,它将为您提供一个副本。你知道吗以及一个替代解决方案:
演示:
这是我最初的、冗长而繁琐的解决方案,但其他用户发布了更简洁和清晰的答案。谢谢你们。你知道吗
定义第三个创建(strArr): 字数=斯特拉尔·斯普利特() 排序=[]#字长 sort2=[]#实际单词
ThirdGreatest(原始输入(“输入字符串:”))
相关问题 更多 >
编程相关推荐