当列表转换为元组时,元素的顺序会改变吗?

时间:2019-04-16 01:33:51

标签: python

在我的问题中,列表中元素的顺序有意义。因此,保持其顺序很重要。

例如)[102030,101091]公司102030出售给公司101091

我有两个这样的列表。

  

例如)

list1 = [[102030, 101091], [10102, 990], .....]
list2 = [[102030, 101091], [40102, 290], .....]`

因为我想进行诸如交集,并集的设置操作,仅保留唯一元素,所以我试图将这两个列表设置为set。

但是

  

set(list1)返回   “无法散列的类型:'列表'”

因此,我还是选择了以下代码

set1 = set([tuple(item) for item in list1])    
set2 = set([tuple(item) for item in list2])

并执行一些set操作,例如set1&set2,set1 | set2。

但是,我担心将列表更改为元组可能会将其元素的顺序从[102030,101091]更改为(101091,102030)。

我的问题是,

  1. 将列表转换为元组会更改其元素顺序吗?

  2. 如果是这样,还有没有更多的pythonic方法可以完成我打算做的事情(仅保留唯一元素(类型为list的元素)并进行设置操作)?

2 个答案:

答案 0 :(得分:1)

  1. 将列表转换为元组不会更改元素的顺序。元组是有序的,列表也是有序的。
  2. 是的,您可以使用generator expressions(而不是列表推导)。
<button (click)="buildTable()">Build table</button>

<table #table>

</table>
<ng-template #cell>
    <td>
        <input type="checkbox" (change)="onCheck($event)" disabled]="excluded" />
    </td>
</ng-template>

生成器表达式不会在内存中构建列表,而是一次(懒惰地)遍历元素。这使它们比列表理解要快得多。

请注意,生成器表达式通常写为set(tuple(item) for item in your_list) ,但是,当用作函数的唯一参数时,括号将被省略-否则将看起来像这样:

generator = (tuple(item) for item in your_list)

这当然容易出错。

您也可以使用set((tuple(item) for item in your_list)) 功能。 (外部)这与上面的生成器表达式完全相同。

map()

答案 1 :(得分:0)

  1. 组合和列出都支持索引并且已排序。在它们之间进行转换不会更改此顺序。

  2. 有些单行解决方案涉及map()或其他方法,但是您的代码可读性最高,并且时间也不长,所以我喜欢它。如果要单行而不使其变得更复杂,则可以使用逗号(如果列表很长,则不要这样做):

    list1, list2 = [[102030, 101091], [10102, 990], .....], [[102030, 101091], [40102, 290], .....]