簡體   English   中英

從csv / 2d數組中提取一系列元素

[英]extracting a range of elements from a csv / 2d array

我想從一系列元素中提取元素是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[:]只是data 的副本

>>> 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)]

要獲得一個列表而不是兩個元組的列表,請使用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]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM