假設我有以下串列,并且我希望能夠加入每個串列中的最后三個專案并將加入的專案放回原始串列。我將如何使用 list comp 之類的東西來做到這一點?我知道如何通過撰寫復雜的代碼行來做到這一點,但是我正在尋找的是一個有效的一兩個線性代碼來完成我想做的事情。
我的串列:
lines = [
['0', 'AG1C', 'A', '05/27/2020', '10:20', 'PM'],
['1', 'AG1C', 'B', '05/27/2020', '1:22', 'PM'],
['2', 'AG1C', 'B', '05/16/2020', '12:58', 'AM'],
['3', 'AG1C', 'C', '05/17/2020', '10:34', 'AM'],
['4', 'AG1C', 'C', '05/28/2020', '2:10', 'AM']]
這是我嘗試過但沒有奏效的方法:
lines = [line[:2].append(f'{line[-2]} {line[-1]}') for line in lines]
我想要的輸出:
print(lines)
[['0', 'AG1C', 'A', '05/27/2020 10:20 PM'],
['1', 'AG1C', 'B', '05/27/2020 1:22 PM'],
['2', 'AG1C', 'B', '05/16/2020 12:58 AM'],
['3', 'AG1C', 'C', '05/17/2020 10:34 AM'],
['4', 'AG1C', 'C', '05/28/2020 2:10 AM']]
任何幫助都感激不盡
uj5u.com熱心網友回復:
也許這樣的事情可以幫助您:
x = [[line[0], line[1], line[2], ' '.join(line[3:])] for line in lines]
print(x)
輸出:
[['0', 'AG1C', 'A', '05/27/2020 10:20 PM'],
['1', 'AG1C', 'B', '05/27/2020 1:22 PM'],
['2', 'AG1C', 'B', '05/16/2020 12:58 AM'],
['3', 'AG1C', 'C', '05/17/2020 10:34 AM'],
['4', 'AG1C', 'C', '05/28/2020 2:10 AM']]
uj5u.com熱心網友回復:
您實際上非常接近正確答案。您的解決方案中的問題是 .append 不回傳實際串列,它只是在適當的位置修改串列并回傳 None。為此,您可以總結 2 個串列,這些串列將回傳另一個串列,如下所示:
lines = [line[:2] [f"{line[-2]} {line[-1]}"] for line in lines]
現在的問題是索引為 2 和 3 的專案被忽略了
lines = [line[:3] [f"{line[-3]} {line[-2]} {line[-1]}"] for line in lines]
這將回傳所需的輸出,但仍有一些需要更改的地方。
另外那個 f-string 看起來也不是“pythonic”。另一種方法是獲取最后 3 個元素的串列并使用字串連接方法,如下所示:
lines = [line[:3] [" ".join(line[-3:])] for line in lines]
這僅適用于原始串列長度為 6 的特定情況。
lines = [line[:-3] [" ".join(line[-3:])] for line in lines]
Usingline[:-3]將獲取除最后 3 個元素之外的所有元素。這是通用解決方案。
uj5u.com熱心網友回復:
這是執行此操作的另一種方法:
lines = [line[:3] [' '.join(line[3:])] for line in lines]
uj5u.com熱心網友回復:
另一種無需切片的可讀方法:
lines = [[a, b, c, " ".join(d)] for a, b, c, *d in lines]
uj5u.com熱心網友回復:
lines = [
['0', 'AG1C', 'A', '05/27/2020', '10:20', 'PM'],
['1', 'AG1C', 'B', '05/27/2020', '1:22', 'PM'],
['2', 'AG1C', 'B', '05/16/2020', '12:58', 'AM'],
['3', 'AG1C', 'C', '05/17/2020', '10:34', 'AM'],
['4', 'AG1C', 'C', '05/28/2020', '2:10', 'AM']]
for i in lines:
last_items = ' '.join(i[3:len(i)])
for k in range(3):
i.remove(i[-1])
i.append(last_items)
print(lines)
uj5u.com熱心網友回復:
一行代碼:
for i in range(len(lines)): lines[i][3:] = [' '.join(lines[i][3:])]
輸出:
[['0', 'AG1C', 'A', '05/27/2020 10:20 PM'],
['1', 'AG1C', 'B', '05/27/2020 1:22 PM'],
['2', 'AG1C', 'B', '05/16/2020 12:58 AM'],
['3', 'AG1C', 'C', '05/17/2020 10:34 AM'],
['4', 'AG1C', 'C', '05/28/2020 2:10 AM']]
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/322328.html
上一篇:如何洗掉串列python中的\t\n\r進行網路抓取?
下一篇:跟蹤已處理的串列
