简而言之,是的,订单被保留了。长篇:
通常,以下定义将始终适用于列表等对象:
列表是元素的集合,可以包含重复的元素,并且具有定义的顺序,除非明确要求,否则通常不会更改。 stacks 和 queues 都是为添加和删除元素提供特定(通常是有限的)行为的列表类型(堆栈是 LIFO,队列是 FIFO)。列表是事物列表的实际表示。一个字符串可以被认为是一个字符列表,因为顺序很重要("abc" != "bca"),并且字符串内容中的重复当然是允许的("aaa" 可以存在,!= "a")。
set 是一组元素的集合,它们不能包含重复项,并且具有可能会或可能不会随时间变化的不确定顺序。集合并不代表事物的列表,而是描述了特定事物选择的范围。 set 的内部结构,它的元素是如何相互存储的,通常并不意味着传达有用的信息。在某些实现中,集合总是在内部排序;在其他情况下,排序只是未定义(通常取决于哈希函数)。
Collection 是一个通用术语,指的是用于存储(通常是可变的)数量的其他对象的任何对象。列表和集合都是集合的一种。元组和数组通常不被视为集合。一些语言也将 maps(描述不同对象之间关联的容器)视为一种集合。
这个命名方案适用于我所知道的所有编程语言,包括 Python、C++、Java、C# 和 Lisp(其中不按顺序排列的列表尤其具有灾难性)。如果有人知道情况并非如此,请直接说出来,我会编辑我的答案。请注意,特定的实现可能对这些对象使用其他名称,例如 C++ 中的 vector 和 ALGOL 68 中的 flex(这两个列表;flex 在技术上只是一个可调整大小的数组) .
如果由于+ 符号在这里的具体工作方式而在您的案例中留下任何混淆,请知道顺序对于列表重要,除非有充分的理由相信否则,您几乎总是可以安全地假设列表操作保持顺序。在这种情况下,+ 符号的行为与字符串(实际上只是字符列表)的行为非常相似:它获取列表的内容并将其放在另一个列表的内容后面。
如果我们有
list1 = [0, 1, 2, 3, 4]
list2 = [5, 6, 7, 8, 9]
然后
list1 + list2
是一样的
[0, 1, 2, 3, 4] + [5, 6, 7, 8, 9]
计算结果为
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
很像
"abdcde" + "fghijk"
生产
"abdcdefghijk"