python,删除列表中重复的字符串 如果使用unique_list = list(set(lst))这行代码会报错: TypeError: unhashable type: 'list'
时间: 2024-12-13 17:25:33 浏览: 12
Python中,如果你想要删除列表(lst)中的重复元素,尤其是当元素是不可哈希的(如列表),直接使用`set()`可能会遇到错误,因为集合内的元素必须是可哈希的。在这种情况下,你可以先使用`map()`函数结合`lambda`表达式,对列表中的每个元素进行扁平化处理,然后再转化为集合来消除重复。
这里有两个示例,展示如何实现这个过程:
1. 使用`deep_flatten`函数[^1]来扁平化列表:
```python
def deep_flatten(lst):
return spread(list(map(lambda x: x if not isinstance(x, list) else deep_flatten(x), lst)))
unique_list = list(set(deep_flatten(lst))) # 首先扁平化,然后转为集合去重
```
2. 或者使用`deep_flatten`[^2]函数:
```python
unique_list = list(set(spread(list(map(lambda x: deep_flatten(x) if type(x) == list else x, lst))))) # 直接对原始元素扁平化再进行去重
```
这两个版本的区别在于,第一个方法递归地处理嵌套的列表,而第二个方法是在扁平化之前就判断元素是否为列表。
相关问题
sorted_list = sorted(lst, key=lambda x: x[-1]) 解释这行代码
这行代码通过使用 Python 的内置函数 `sorted()` 对列表 `lst` 进行排序。排序的依据是列表中每个元素的最后一个字符。
具体地,它使用了一个匿名函数 `lambda x: x[-1]` 作为排序的 key,表示将列表中的每个元素 `x` 的最后一个字符作为排序的依据。在 Python 中,`x[-1]` 表示 `x` 中的最后一个元素。
这样,函数 `sorted()` 将按照每个元素的最后一个字符的顺序进行排序,并返回一个新的已排序的列表 `sorted_list`。
strings = ['6,29'] lists = [[] for _ in range(len(strings))] for i, string in enumerate(strings): nums = [int(num) for num in string.split(',')] for j, num in enumerate(nums): lists[j].append(num) lst_lisn = [] for lst in lists: lst_lisn.append(lst) print(lst_lisn) 运行报错:Traceback (most recent call last): File "D:\Users\Lenovo\PycharmProjects\pythonProject\shishi.py", line 7, in <module> lists[j].append(num) ~~~~~^^^ IndexError: list index out of range
这个错误是由于 `lists` 列表的索引超出范围引起的。在你的代码中,`lists` 列表的长度是根据 `strings` 列表的长度创建的,但是在处理 `['6,29']` 这个字符串时,没有正确地更新 `lists` 的长度。
为了解决这个问题,你可以直接使用 `nums` 列表的长度来创建 `lists` 列表,而不是使用 `strings` 列表的长度。以下是修改后的代码:
```python
strings = ['6,29']
nums = [int(num) for num in strings[0].split(',')]
lists = [[] for _ in range(len(nums))]
for j, num in enumerate(nums):
lists[j].append(num)
lst_lisn = []
for lst in lists:
lst_lisn.append(lst)
print(lst_lisn)
```
这样,将会根据 `nums` 列表的长度创建足够的空列表,并将提取出来的数字按照索引依次添加到相应的列表中。
输出结果为:
```
[[6], [29]]
```
现在,代码可以正确地处理包含单个字符串的情况,并根据提取出来的数字创建相应的列表。
阅读全文