Текущие ответы хороши, но не говорите о том, как они представляют собой синтаксический сахар для некоторого шаблона, к которому мы так привыкли.
Давайте начнем с примера, скажем, у нас есть 10 чисел, и мы хотим подмножество тех, которые больше, чем, скажем, 5.
>>> numbers = [12, 34, 1, 4, 4, 67, 37, 9, 0, 81]
. Для вышеупомянутой задачи нижеприведенные подходы полностью идентичны друг другу и идут от большинства дословных до кратких, читаемых и pythonic :
result = []
for index in range(len(numbers)):
if numbers[index] > 5:
result.append(numbers[index])
print result #Prints [12, 34, 67, 37, 9, 81]
result = []
for number in numbers:
if number > 5:
result.append(number)
print result #Prints [12, 34, 67, 37, 9, 81]
result = [number for number in numbers if number > 5]
[function(number) for number in numbers if condition(number)]
где:
function(x)
принимает x
и преобразует его во что-то полезное (например, x*x
) condition(x)
возвращает любое значение False-y (False, None, empty string, empty list , и т. д.), то текущая итерация будет пропущена (подумайте continue
). Если функция возвращает значение, отличное от False-y, то текущее значение переходит к окончательному результирующему массиву (и проходит этап преобразования выше). Чтобы понять синтаксис в слегка по-разному посмотрите в разделе «Бонус» ниже.
Для получения дополнительной информации следуйте руководству, которое все другие ответы связали: List Consrehension
(Немного непитонический, но поставив его здесь для полноты)
Пример выше может быть записан как:
result = filter(lambda x: x > 5, numbers)
Общее выражение выше, может быть записано как:
result = map(function, filter(condition, numbers)) #result is a list in Py2
Вы устанавливаете DockPanel.Dock = "Top" в StackPanel, но StackPanel не является дочерним элементом DockPanel ... граница . Ваше свойство стыковки игнорируется.
Если вместо этого вы переместите DockPanel.Dock = "Top" в Border, обе проблемы будут исправлены :)
May быть этим будет полезный:
<Border BorderBrush="Black" BorderThickness="1" HorizontalAlignment="Left" Height="160" Margin="10,55,0,0" VerticalAlignment="Top" Width="492"/>
А что насчет этого:
<DockPanel Margin="8">
<Border CornerRadius="6" BorderBrush="Gray" Background="LightGray" BorderThickness="2" DockPanel.Dock="Top">
<StackPanel Orientation="Horizontal">
<TextBlock FontSize="14" Padding="0 0 8 0" HorizontalAlignment="Center" VerticalAlignment="Center">Search:</TextBlock>
<TextBox x:Name="txtSearchTerm" HorizontalAlignment="Center" VerticalAlignment="Center" />
<Image Source="lock.png" Width="32" Height="32" HorizontalAlignment="Center" VerticalAlignment="Center" />
</StackPanel>
</Border>
<StackPanel Orientation="Horizontal" DockPanel.Dock="Bottom" Height="25" />
</DockPanel>