python 列表去重,要求保留先出现的
时间: 2023-11-09 13:10:23 浏览: 58
方法一:
使用 for 循环遍历列表,将每个元素添加到一个新的列表中,如果该元素已经存在于新的列表中,则跳过,否则将该元素添加到新的列表中。
```python
lst = [1, 2, 3, 2, 1, 4, 5, 4]
new_lst = []
for i in lst:
if i not in new_lst:
new_lst.append(i)
print(new_lst)
```
输出结果为:`[1, 2, 3, 4, 5]`
方法二:
使用集合去重,再将集合转换为列表。由于集合是无序的,所以不能保证去重后的元素顺序与原列表一致。
```python
lst = [1, 2, 3, 2, 1, 4, 5, 4]
new_lst = list(set(lst))
print(new_lst)
```
输出结果为:`[1, 2, 3, 4, 5]`
方法三:
使用字典去重,由于字典中的键是唯一的,所以可以利用字典去重的特性,将列表中的元素作为字典的键,最后将字典转换为列表。
```python
lst = [1, 2, 3, 2, 1, 4, 5, 4]
new_lst = list(dict.fromkeys(lst))
print(new_lst)
```
输出结果为:`[1, 2, 3, 4, 5]`
相关问题
python列表去重排序
如果你想在Python中对列表进行选择性的去重和排序,可以使用列表推导式和内置函数来实现。下面是一个示例代码:
```python
my_list = [3, 1, 2, 3, 4, 1, 2]
sorted_list = sorted(list(set([x for x in my_list if my_list.count(x) == 1])))
print(sorted_list)
```
这里的列表推导式`[x for x in my_list if my_list.count(x) == 1]`会遍历原始列表`my_list`中的每个元素,并仅保留出现次数为1的元素。然后,我们将得到的列表转换为集合(set),再使用`sorted()`函数对集合进行排序,最后将排序后的集合转换回列表。
输出结果为:
Python文件夹去重保留长文件名案例
好的,我可以帮你解答这个问题。
假设你有一个文件夹,里面有一些文件,有些文件名相同,但是文件大小、修改时间等信息不同,你想要去重,但是要保留文件名比较长的文件。你可以按照以下步骤进行操作:
1. 使用 os 模块遍历文件夹中的所有文件,获取文件名、文件大小、修改时间等信息,并存储在一个列表中。
```python
import os
folder_path = "/path/to/folder"
file_list = []
for root, dirs, files in os.walk(folder_path):
for file in files:
file_path = os.path.join(root, file)
file_size = os.path.getsize(file_path)
file_mtime = os.path.getmtime(file_path)
file_list.append((file, file_size, file_mtime))
```
2. 排序列表,按照文件名长度降序排列。
```python
file_list.sort(key=lambda x: len(x[0]), reverse=True)
```
3. 遍历排序后的列表,如果文件名已经存在于字典中,则删除该文件;否则,将文件名作为字典的键,文件路径作为值存储在字典中。
```python
file_dict = {}
for file_info in file_list:
file_name, file_size, file_mtime = file_info
if file_name in file_dict:
os.remove(os.path.join(folder_path, file_name))
else:
file_dict[file_name] = os.path.join(folder_path, file_name)
```
4. 完成去重操作。
值得注意的是,如果有多个文件名长度相同的文件,只有最后一个文件会被保留。如果你想要保留第一个文件,可以将排序方式改为升序排列。
```python
file_list.sort(key=lambda x: len(x[0]))
```