python删除重复数组且保持原有顺序
时间: 2023-11-09 14:07:57 浏览: 90
可以使用OrderedDict来实现:
```python
from collections import OrderedDict
def remove_duplicates(arr):
return list(OrderedDict.fromkeys(arr))
arr = [1, 2, 3, 2, 1, 4, 5, 4]
print(remove_duplicates(arr)) # 输出 [1, 2, 3, 4, 5]
```
首先,fromkeys方法创建一个新的OrderedDict对象,其中每个键都对应于arr列表中的一个唯一元素。最后,我们将OrderedDict的键转换为列表以获得唯一的元素列表,并按原始顺序排列。
相关问题
python中将数组去重后不改变序列顺序怎么做
可以使用Python中的set()函数来实现数组去重,然后将去重后的元素重新存放到一个新的数组中,这样就可以保持原有的顺序不变。具体实现可以参考以下代码:
```
# 原始数组
arr = [1, 2, 3, 2, 4, 3, 5, 6, 5]
# 创建一个空的列表
new_arr = []
# 遍历原始数组
for i in arr:
# 如果元素不在新数组中,则添加到新数组中
if i not in new_arr:
new_arr.append(i)
# 打印去重后的数组
print(new_arr)
```
输出的结果为:`[1, 2, 3, 4, 5, 6]`,可以看到原有的顺序并没有改变。
python 多维数组转1维数组
### Python中将多维数组转换为一维数组
在Python中,`numpy`库提供了多种方法来将多维数组转换为一维数组。以下是几种常用的方法:
#### 使用 `reshape`
可以通过指定目标形状参数 `-1` 来自动计算所需的尺寸大小,从而实现降维操作。
```python
import numpy as np
a1 = [[1, 2, 3, 4], [4, 5, 6, 7]]
array_a1 = np.array(a1)
f1_reshaped = array_a1.reshape(-1)
print(f"Using reshape to convert multi-dimensional array into one dimension:\n{f1_reshaped}")
```
这种方法简单直观,但是需要注意的是它返回一个新的副本对象而不是视图[^1]。
#### 使用 `flatten`
该函数会创建原数组的一个深拷贝并将其压平为一维形式,默认按照行优先顺序排列元素(C风格),也可以通过设置参数改变遍历方式。
```python
flattened_array_c_order = array_a1.flatten()
print(f"Flatten with C order (row-major):\n{flattened_array_c_order}")
flattened_array_fortran_order = array_a1.flatten('F')
print(f"Flatten with Fortran order (column-major):\n{flattened_array_fortran_order}")
```
此方法同样会产生新的内存分配用于存储结果数据[^3]。
#### 使用 `ravel`
与`flatten`相似之处在于两者都能把一个多维度矩阵压缩成单一向量;不同点则体现在于当输入是一个已经平坦化的ndarray时,`ravel()`不会复制任何东西而是直接给出原始指针指向的数据结构作为输出——即返回一个基于相同底层数组的视图而非独立的对象。
```python
raveled_array = array_a1.ravel()
print(f"Ravel output which may share memory with original array:\n{raveled_array}")
```
对于大多数应用场景来说,这三种手段都可以满足需求,但在性能敏感的情况下应当考虑它们之间的细微差别以及是否有必要保留原有数据不变等问题[^4]。
阅读全文