Python 二级套列表对子列表的字符去重,要求 1 每个列表的字符都是不同的 2 列表之间不重复 3 列表的数据顺序不变 4 列表之间的字符串不重复
时间: 2023-10-30 16:04:44 浏览: 154
Python 如何实现字符串与列表等数据的去重 Python源码
可以使用集合(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']`;第三个子列表和第四个子列表中的字符都是不同的,所以不需要去重。最后得到的新列表中,每个子列表中的字符都是不同的,列表之间也不重复,而且列表的数据顺序与原始列表相同。
阅读全文