您能帮助我理解此代码如何工作吗?
words = ["dan","kar","dream","adsadsadad","AHAHAHAHAHAHHHAAHAHA","aaa"]
best = 0
for index in range(len(words)):
if len(words[index]) > len(words[best]):
best = index
print(words[best])
答案 0 :(得分:1)
对于列表中的每个单词,请检查,如果当前单词的长度大于我们到目前为止所看到的最长单词,则它是新的最长单词。
基本上,我们不是每次都将单词的长度存储在列表中,而是每次都对其进行检查,然后确定最长的单词。
答案 1 :(得分:0)
我们有以下代码:
words = ["dan","kar","dream","adsadsadad","AHAHAHAHAHAHHHAAHAHA","aaa"]
best = 0
for index in range(len(words)):
if len(words[index]) > len(words[best]):
best = index
print(words[best])
让我们细分一下:
words = ["dan","kar","dream","adsadsadad","AHAHAHAHAHAHHHAAHAHA","aaa"]
这将创建一个各种长度的单词列表。
best = 0
此变量将索引保存到迄今为止我们遇到的最长的单词。
for index in range(len(words)):
for
语句将遍历单词列表。
if len(words[index]) > len(words[best]):
此if
语句检查当前索引处的单词是否长于best
所指向的索引单词。
best = index
如果到目前为止,新单词的长度大于我们的最佳单词,则将最佳单词设置为新索引。
print(words[best])
我们通过使用保存的最佳单词索引来打印单词。
答案 2 :(得分:0)
best = 0
:
这意味着,到目前为止,列表中的最长长度为0。此值将在循环中更新。
for index in range(len(words))
:
在您的示例中,len(words)为6,即列表“ words”中的单词数。因此循环将从索引0(“ dan”)变为5(“ aaa”)。
然后,程序检查当前单词的长度是否大于到目前为止最长的单词的长度。如果更长,则将当前索引保存在变量“最佳”中。
最后,它会打印与该索引相对应的单词。
答案 3 :(得分:0)
其中的for
循环遍历动态创建的索引列表,该列表从0到words
的长度(即6)(范围不包括第6个索引)。
然后,如果index
的值索引中的单词长度大于先前选择的最长单词,则最长单词的新索引将为当前索引。
追踪: 最佳= 0 索引= 0
[index](dan)一词的长度是否大于[best](dan)一词的长度?没有。 进行下一个迭代。
最佳= 0 索引= 1
[index](kar)一词的长度是否大于[best](dan)一词的长度?没有。 进行下一个迭代。
最佳= 0 索引= 2
单词[index](梦)的长度是否大于单词[best](dan)的长度?是。 best的新值是2。
然后重复该过程,直到完成该过程为止
答案 4 :(得分:0)
您的代码正在遍历名为<ListBox
x:Name="listBox"
Width="400"
Height="150"
ScrollViewer.HorizontalScrollBarVisibility="Hidden"
ItemsSource="{Binding ItemsSourceProperty}"
SelectedItem="{Binding SelectedItemProperty}">
<ListBox.ItemTemplate>
<DataTemplate>
<TextBlock Padding="0"
Margin="0"
Text="{Binding DisplayTextProperty}"
Width="{Binding ElementName=listBox, Path=Width}">
<TextBlock.InputBindings>
<MouseBinding
Command="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type ListBox}}, Path=DataContext.SelectProjectCommand}"
Gesture="LeftDoubleClick" />
</TextBlock.InputBindings>
</TextBlock>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
的列表的索引0, 1, 2, ..., length-1
。
第一次将最大长度字符串视为索引为words
的字符串,即通过设置0
。
在每次迭代中,它比较索引best = 0
上当前字符串的长度和索引best
上字符串的长度,并在条件{{1}下用新索引重置index
的值。 }}的评估结果为rest
。
这样,在for循环完成后,您将获得最大长度字符串的确切索引。
因此,如果您要获取最大长度,则还可以计算最大长度字符串及其长度。
下面是使用len(words[index]) > len(words[best])
和True
的单行代码,可用于获取列表中可用的最大长度字符串的长度。
reduce()
答案 5 :(得分:0)
已经有了许多好的答案,但是这里有另一个使用了key
的鲜为人知的max
参数:
>>> words = ["dan","kar","dream","adsadsadad","AHAHAHAHAHAHHHAAHAHA","aaa"]
>>> max(words, key=len)
'AHAHAHAHAHAHHHAAHAHA'
编辑:我在最初的回复中错过了@Indominus的评论,因此他应该得到所有的功劳:P
答案 6 :(得分:0)
上面的代码是这样的
答案 7 :(得分:0)
除了“线性搜索”算法外,什么都没有。
让我们举一个例子,不是单词而是数字。
nums = [ 9,5,8,6,3,4 ]
#assuming the first element as our biggest number
biggest_number = nums[0]
for i in range(0, len(nums)):
if nums[i] > biggest_number: #comparing each number with the biggest number we assumed
biggest_number = nums[i] #if our current number bigger than biggest_number then replace the value
print(biggest_number)
在代码中,您只是将元素与所有其他元素一一比较,并检查当前元素是否满足条件(在这种情况下,该条件是否大于其他条件),并在该位置替换值才不是;最后返回满足条件的最后一个值。
在您的代码中,它与字符串的长度有关。