在我的问题中,列表中元素的顺序有意义。因此,保持其顺序很重要。
例如)[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)。
我的问题是,
将列表转换为元组会更改其元素顺序吗?
如果是这样,还有没有更多的pythonic方法可以完成我打算做的事情(仅保留唯一元素(类型为list的元素)并进行设置操作)?
答案 0 :(得分:1)
<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)
组合和列出都支持索引并且已排序。在它们之间进行转换不会更改此顺序。
有些单行解决方案涉及map()
或其他方法,但是您的代码可读性最高,并且时间也不长,所以我喜欢它。如果要单行而不使其变得更复杂,则可以使用逗号(如果列表很长,则不要这样做):
list1, list2 = [[102030, 101091], [10102, 990], .....], [[102030, 101091], [40102, 290], .....]