从向量列表中,仅从每个向量中提取一列

2024-03-29 11:21:44 发布

您现在位置:Python中文网/ 问答频道 /正文

给定向量列表:

[((0, 2.6147858445098677), (1, 1.0257184186249431)), ((0, 2.6147858445098677), (2, 0.34113605903013322)), ((0, 2.6147858445098677), (3, 0.074196986667672063)), ((1, 1.0257184186249431), (2, 0.34113605903013322)), ((1, 1.0257184186249431), (3, 0.074196986667672063)), ((2, 0.34113605903013322), (3, 0.074196986667672063))]

如何只提取每个向量中的第一个条目

[(0, 1), (0,2), (0, 3), (1, 2), (1,3), (2, 3)]

Tags: 列表条目向量
3条回答
lista =[
    ((0, 2.6147858445098677), (1, 1.0257184186249431)), 
    ((0, 2.6147858445098677), (2, 0.34113605903013322)),
    ((0, 2.6147858445098677), (3, 0.074196986667672063)), 
    ((1, 1.0257184186249431), (2, 0.34113605903013322)), 
    ((1, 1.0257184186249431), (3, 0.074196986667672063)), 
    ((2, 0.34113605903013322), (3, 0.074196986667672063)) ]

new_lista = []

for i in lista:
    new_lista.append((i[0][0], i[1][0]))

print(new_lista)

或:

[new_lista.append((i[0][0], i[1][0])) for i in lista]
(xenial)vash@localhost:~/python/stack_overflow$ python3.7 vector.py
[(0, 1), (0, 2), (0, 3), (1, 2), (1, 3), (2, 3)]

map

>>> l=[((0, 2.6147858445098677), (1, 1.0257184186249431)), ((0, 2.6147858445098677), (2, 0.34113605903013322)), ((0, 2.6147858445098677), (3, 0.074196986667672063)), ((1, 1.0257184186249431), (2, 0.34113605903013322)), ((1, 1.0257184186249431), (3, 0.074196986667672063)), ((2, 0.34113605903013322), (3, 0.074196986667672063))]
>>> list(map(lambda x: (x[0][0],x[1][0]),l))
[(0, 1), (0, 2), (0, 3), (1, 2), (1, 3), (2, 3)]
>>> 

可以用一个列表。每个项都是一个包含两个元组的元组,因此我们可以像这样解析每个内部元组的第一项:

x = [((0, 2.6147858445098677), (1, 1.0257184186249431)), ((0, 2.6147858445098677), (2, 0.34113605903013322)), ((0, 2.6147858445098677), (3, 0.074196986667672063)), ((1, 1.0257184186249431), (2, 0.34113605903013322)), ((1, 1.0257184186249431), (3, 0.074196986667672063)), ((2, 0.34113605903013322), (3, 0.074196986667672063))]
result = [(item[0][0], item[1][0]) for item in x]
print(result)

输出:

[(0, 1), (0, 2), (0, 3), (1, 2), (1, 3), (2, 3)]

根据需要。这是非常c风格的,你可以得到一个更pythonic如果你想和使用元组解包:

result = [(first[0], second[0]) for  first, second in x]

这更容易理解

相关问题 更多 >