Другой метод:
my_list = [480, 9, 104]
pat = r'({})'.format('|'.join(str(i) for i in my_list))
#'(480|9|104)' <-- This is how the pat looks like
df.loc[df.split_categories.astype(str).str.extract(pat, expand=False).dropna().index]
Или:
pat = '|'.join(r"\b{}\b".format(x) for x in my_list)
df[df.split_categories.astype(str).str.contains(pat,na=False)]
album_id categories split_categories
0 66562 480.494 [480, 494]
3 1709 9.000 [9]
4 59239 105.104 [105, 104]
Это будет работать с колонками split_categories
и categories
.
Я создал пользовательский ToolStripPanel так, чтобы я мог перегрузить LayoutEngine;
using System.Drawing;
using System.Windows.Forms;
using System.Windows.Forms.Layout;
namespace CustomGUI
{
class CustomToolStripPanel : ToolStripPanel
{
private LayoutEngine _layoutEngine;
public override LayoutEngine LayoutEngine
{
get
{
if (_layoutEngine == null) _layoutEngine = new CustomLayoutEngine();
return _layoutEngine;
}
}
public override Size GetPreferredSize(Size proposedSize)
{
Size size = base.GetPreferredSize(proposedSize);
foreach(Control control in Controls)
{
int newHeight = control.Height + control.Margin.Vertical + Padding.Vertical;
if (newHeight > size.Height) size.Height = newHeight;
}
return size;
}
}
}
Затем пользовательский LayoutEngine размечает ToolStrips;
using System.Drawing;
using System.Windows.Forms;
using System.Windows.Forms.Layout;
namespace CustomGUI
{
class CustomLayoutEngine : LayoutEngine
{
public override bool Layout(object container, LayoutEventArgs layoutEventArgs)
{
Control parent = container as Control;
Rectangle parentDisplayRectangle = parent.DisplayRectangle;
Control [] source = new Control[parent.Controls.Count];
parent.Controls.CopyTo(source, 0);
Point nextControlLocation = parentDisplayRectangle.Location;
foreach (Control c in source)
{
if (!c.Visible) continue;
nextControlLocation.Offset(c.Margin.Left, c.Margin.Top);
c.Location = nextControlLocation;
if (c.AutoSize)
{
c.Size = c.GetPreferredSize(parentDisplayRectangle.Size);
}
nextControlLocation.Y = parentDisplayRectangle.Y;
nextControlLocation.X += c.Width + c.Margin.Right + parent.Padding.Horizontal;
}
return false;
}
}
}
Одна вещь, которая требовала времени, является этим изменяющим местоположение / размер одного объекта ToolStrip заставит расположение повторно стрелять с переупорядоченными средствами управления. Таким образом, я делаю копию средств управления перед циклом расположения. И Вы наклоняетесь, используют AddRange (...), чтобы добавить, что объекты к Пользовательской Панели по некоторым причинам - должны Добавить (...) их по одному.
надежда, которая помогает (она основана на примере MSDN LayoutEngine, зафиксированном для ToolStripPanels),
Wyzfen
Я думаю в Вашем случае, можно сойти с рук просто установка LayoutStyle на ToolStrip к ToolStripLayoutStyle. HorizontalStackWithOverflow, а не потребность Ваш собственный LayoutEngine.
Я задал другой вопрос по подобной теме о том, как обработать расположение с динамическими объектами, чтобы иметь лучший контроль над переполнением.
System.Windows.Forms.FlowLayoutPanel может выполнять эту работу.
Просто поместите в него элементы управления ToolStrip в правильном порядке.