Python相当于C#的通用List <t>

时间:2017-04-02 12:32:53

标签: python listview tkinter listbox

我正在创建一个简单的GUI程序来管理优先级。

Priorities

我已成功设法添加将项目添加到列表框的功能。现在我想将项目添加到名为List&lt;&gt;的内容中。在C#中。 Python中是否存在这样的事情?

例如,在C#中,要将项目添加到listview,我首先要创建:

List<Priority> priorities = new List<Priority>();

...然后创建以下方法:

void Add()
{
    if (listView1.SelectedItems.Count > 0)
    {
        MessageBox.Show("Please make sure you have no priorities selected!", "Notification", MessageBoxButtons.OK, MessageBoxIcon.Information);
    }
    else if (txt_Priority.ReadOnly == true) { MessageBox.Show("Please make sure you refresh fields first!", "Notification", MessageBoxButtons.OK, MessageBoxIcon.Information); }
    else
    {
        if ((txt_Priority.Text.Trim().Length == 0)) { MessageBox.Show("Please enter the word!", "Notification", MessageBoxButtons.OK, MessageBoxIcon.Information); }
        else
        {
            Priority p = new Priority();
            p.Subject = txt_Priority.Text;

            if (priorities.Find(x => x.Subject == p.Subject) == null)
            {
                priorities.Add(p);
                listView1.Items.Add(p.Subject);
            }
            else
            {
                MessageBox.Show("That priority already exists in your program!");
            }
            ClearAll();
            Sync();
            Count();
        }
    }
    SaveAll();

}

2 个答案:

答案 0 :(得分:3)

Python是dynamic

>>> my_generic_list = []
>>> my_generic_list.append(3)
>>> my_generic_list.append("string")
>>> my_generic_list.append(['another list'])
>>> my_generic_list
[3, 'string', ['another list']]

在将任何对象附加到现有list之前,您不必定义任何内容。

Python使用duck-typing。如果迭代列表并在每个元素上调用方法,则需要确保元素理解该方法。

所以,如果你想要相当于:

List<Priority> priorities

您只需初始化一个列表,并确保只向其添加Priority个实例。那就是它!

答案 1 :(得分:0)

幸运的是,从 Python 3.9 (3.8) 开始支持泛型集合:https://docs.python.org/3/library/typing.html#generic-concrete-collections
下面是一个例子:

listOfInts: list[int] = []

# dictionary with string keys and int values:
typedDict: dict[str, int] = []