gpt4 book ai didi

python - 从 csv/2d 数组中提取一系列元素

转载 作者:行者123 更新时间:2023-12-01 05:12:13 25 4
gpt4 key购买 nike

我想从 csv 文件中特定列的一系列元素中提取元素。

我已将问题简化为:

data = [['a',1,'A',100],['b',2,'B',200],['c',3,'C',300],['d',4,'D',400]]

print(data[0:2][:],'\nROWS 0&1')
print(data[:][0:2],'\nCOLS 1&1')

我认为这意味着

  • “仅显示第 0 行和第 1 行的所有列”
  • “仅显示第 0 列和第 1 列的所有行”

但是输出总是只显示第 0 行和第 1 行,而不是列,

[['a', 1, 'A', 100], ['b', 2, 'B', 200]] 
ROWS 0&1
[['a', 1, 'A', 100], ['b', 2, 'B', 200]]
COLS 1&1

当我想看到这个时:

['a', 1, 'A', 100,'b', 2, 'B', 200]  # ... i.e. ROWS 0 and 1
['a','b','c','d',1,2,3,4]

有什么好的方法可以做到这一点吗?

最佳答案

你的问题是 data[:] 只是 a copy of 数据:

>>> data
[['a', 1, 'A', 100], ['b', 2, 'B', 200], ['c', 3, 'C', 300], ['d', 4, 'D', 400]]
>>> data[:]
[['a', 1, 'A', 100], ['b', 2, 'B', 200], ['c', 3, 'C', 300], ['d', 4, 'D', 400]]

...因此您两次尝试切片都会得到与 data[0:2] 相同的结果。

您可以通过列表理解仅获取第 0 列和第 1 列:

>>> [x[0:2] for x in data] 
[['a', 1], ['b', 2], ['c', 3], ['d', 4]]

...可以使用 zip() 重新排列为您想要的顺序:

>>> list(zip(*(x[0:2] for x in data)))
[('a', 'b', 'c', 'd'), (1, 2, 3, 4)]

要获取单个列表而不是 2 个元组的列表,请使用 itertools.chain.from_iterable() :

>>> from itertools import chain
>>> list(chain.from_iterable(zip(*(x[0:2] for x in data))))
['a', 'b', 'c', 'd', 1, 2, 3, 4]

...也可用于折叠data[0:2]:

>>> list(chain.from_iterable(data[0:2]))
['a', 1, 'A', 100, 'b', 2, 'B', 200]

关于python - 从 csv/2d 数组中提取一系列元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23945820/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com