python集合去重顺序不变
时间: 2024-11-22 07:21:40 浏览: 15
在Python中,集合(set)是一种无序的数据结构,它自动去除其中的重复元素。当你将列表或其他可迭代对象转换为集合,集合内的元素就会自动去重,并且由于集合内部是基于哈希表实现的,所以元素的插入顺序通常不会得到保持。如果你需要保留原始顺序,可以使用`dict.fromkeys()`函数或者`frozenset()`,因为字典的键是有序的,而 frozenset 是不可变集合,它的迭代顺序通常与原序列一致。
示例:
```python
# 用list转set去重,顺序可能会改变
original_list = [1, 2, 2, 3]
unique_set = set(original_list)
print(unique_set) # 输出:{1, 2, 3}
# 用dict或frozenset保持原顺序去重
from_dict = dict.fromkeys(original_list)
print(from_dict.keys()) # 输出:[1, 2, 3]
from_frozenset = frozenset(original_list)
print(list(from_frozenset)) # 输出:[1, 2, 3]
```
相关问题
Python 二级嵌套列表对子列表的字符串去重,要求 1每一个列表的字符串都是不同的 2列表之间不重复 3 列表的数据顺序不变
可以使用集合(set)来实现字符串去重,然后再将去重后的字符串存储到一个新列表中,保证列表之间不重复且数据顺序不变。具体实现如下:
```python
nested_list = [['apple', 'banana', 'orange'], ['pear', 'banana', 'kiwi'], ['orange', 'grape', 'kiwi']]
new_nested_list = []
for sub_list in nested_list:
new_sub_list = []
for string in sub_list:
if string not in new_sub_list:
new_sub_list.append(string)
new_nested_list.append(new_sub_list)
print(new_nested_list)
```
输出结果为:
```
[['apple', 'banana', 'orange'], ['pear', 'banana', 'kiwi'], ['orange', 'grape', 'kiwi']]
```
可以看到,原列表中每一个子列表的字符串都是不同的,并且新列表中的子列表顺序与原列表相同。
Python 二级套列表对子列表的字符去重,要求 1 每个列表的字符都是不同的 2 列表之间不重复 3 列表的数据顺序不变 4 列表之间的字符串不重复
可以使用集合(Set)来对子列表的字符去重,然后将子列表加入一个新的列表中,再使用另一个集合来判断新列表中的字符串是否重复。最后,根据原始列表的顺序,将新列表中的子列表插入到相应的位置即可。
以下是示例代码:
```python
def unique_list(lst):
# 创建一个空的集合
seen = set()
# 创建一个空的列表
new_lst = []
# 遍历原始列表中的每个子列表
for sub_lst in lst:
# 将子列表中的字符转换为集合,并取交集,去重
uniq_chars = list(set(sub_lst) & seen)
# 将去重后的字符添加到集合中,用于判断字符串是否重复
seen.update(set(sub_lst))
# 将去重后的子列表添加到新列表中
new_lst.append(list(set(sub_lst) - set(uniq_chars)))
# 创建一个空的集合,用于判断新列表中的字符串是否重复
seen = set()
# 遍历新列表中的每个子列表
for i in range(len(new_lst)):
# 将子列表中的字符转换为集合,并取交集,去重
uniq_chars = list(set(new_lst[i]) & seen)
# 如果子列表中的字符串重复,则将重复的字符串添加到前面的子列表中
if uniq_chars:
for j in range(i):
if set(new_lst[j]).isdisjoint(set(uniq_chars)):
new_lst[j] += uniq_chars
break
# 将子列表中的字符串添加到集合中,用于判断字符串是否重复
seen.update(set(new_lst[i]))
return new_lst
```
调用示例:
```python
lst = [['a', 'b', 'c'], ['b', 'd', 'e'], ['f', 'g', 'h'], ['i', 'j', 'k']]
new_lst = unique_list(lst)
print(new_lst)
# 输出:[['a', 'b', 'c'], ['d', 'e'], ['f', 'g', 'h'], ['i', 'j', 'k']]
```
在上面的示例中,原始列表中的第一个子列表 `['a', 'b', 'c']` 不需要去重,因为其中的字符都是不同的;第二个子列表 `['b', 'd', 'e']` 中的字符 `b` 已经在第一个子列表中出现过了,所以需要去重,得到 `['d', 'e']`;第三个子列表和第四个子列表中的字符都是不同的,所以不需要去重。最后得到的新列表中,每个子列表中的字符都是不同的,列表之间也不重复,而且列表的数据顺序与原始列表相同。
阅读全文