混合列表是否具有现实优势?

时间:2015-11-24 12:41:04

标签: python list

我使用过C#和Java,每次我需要一个List,我想存储相同类型的对象,例如:

List<Customer> customers; 
//or
List<Invoice> invoices;

official Python-Doc州:

  

列表可能包含不同类型的项目,但通常这些项目都具有相同的类型。

因此这是可能的:

list = [1, 2, 3, "cat", some_object, "another cat", 4, "and a cat again"]

有数百个混合列表的例子和解释为什么可能 我理解为什么在python中有可能有混合类型的列表,但我想不出一个有用的现实生活中的例子

我很想知道混合名单是否有真正的优势 或者它只是:“我们不需要它,但我们可以!”

我是否遗漏了一些关于混合列表非常重要的东西,这会让我成为一个更好的python程序员?

修改
我认为这个答案将会让python不能这样做,所以让我重新说一下:

或者它只是:“我们不需要它,但我们不能这样做!”

3 个答案:

答案 0 :(得分:5)

Python列出了相同类型的商店项目 - 对其他对象的引用。

  

或者只是:“我们不需要它,但我们可以!”

不,不是。 Python没有类型检查,所以它更“因为我们不能做其他事情”。

答案 1 :(得分:2)

首先,正如上面链接的cross-site question所引用的那样,请记住像Java这样的语言会让你创建一个Object的数组,这与Python的默认list非常相似。

其次,包含不同类型元素的数据结构有一个非常常见的用例。这是一个例子:

def get_row():
    response = input('Enter your name and score, separated by a space: ').split()
    return response[0], int(response[1])

现在你要返回一个包含字符串和整数的tuple

这是另一个例子:

names = ['Alice', 'Bob', 'Charlie']
scores = [8, 12, 9]
results = dict(zip(names, scores))

如果无法使用字符串和整数创建tuple,我们可能需要执行results = {name:scores[i] for i, name in enumerate(names)}之类的操作。我们能?当然......但很高兴我们可以选择看起来更好的那个,甚至不用考虑我们的数据结构是否包含strintobject,而不必在编译器允许我们使用它们之前强制转换object

答案 2 :(得分:0)

它有应用程序导致多态性。想象一下,你有多个运动对象,比如sockerbasketballfootball,每个运动对象都有不同但都被播放,所以你可以说

socker = Socker()
basketball = Basketball()
football = Football()
sportsILike = [socker, basketball, football]
for sport in sportsILike:
    sport.play()

有趣的是,这些运动是不同的课程!