簡體   English   中英

如何從包含已過濾項目的列表創建子列表?

[英]How to create sublist from a list with filtered item?

我有一個如下的有效載荷 -

1,a1,21,31,b1
2,a2,22,32,b2
3,,23,33,b3
4,a4,,,b4

並嘗試從此字符串中獲取每個第二列並將其放入列表中。

預期產出:

[a1,a2,a4]

我嘗試下面的代碼,但沒有得到所需的輸出 -

ListPayload = []
for line in ((payload.text).splitlines()):
    ListPayload.append(line)

通過這樣做我得到如下的輸出 -

['1,a1,21,31,b1','2,a2,22,32,b2','3,,23,33,b3','4,a4,,,b4']

並使用下面的代碼來獲取第二列 -

filteredList =[]
for i in range(len(ListPayload)):
    filteredList.append(ListPayload[i].split(",")[1])

然后我用下面的方法來獲得所需的輸出

result = [x for x in filteredList if x]
print(result)

有沒有比這更好的方法來獲得所需的輸出?

而不是寫作

ListPayload = []
for line in ((payload.text).splitlines()):
    ListPayload.append(line)

你可以簡單地寫:

lines = payload.text.splitlines()

(請注意,我已將'ListPayload'重命名為'lines',但這可能是個人偏好的問題)

而不是:

filterList =[]
for i in range(len(ListPayload)):
    filterList.append(ListPayload[i].split(",")[1])

你可以寫:

result = [line.split(",")[1] for line in lines]

可以像這樣過濾結果:

result = [line.split(",")[1] for line in lines if line.split(",")[1]]

但在這種情況下,我更喜歡一個簡單的循環(以避免在上面的表格中多次調用split() )。

完整的例子

將所有內容放在一起會產生以下代碼:

result = []
lines = payload.text.split()
for line in lines:
    columns = line.split(',')
    if columns[1]:
        result.append(columns[1])

print(repr(result))

這輸出:

['a1', 'a2', 'a4']

你可以通過以下方式輕松完成:

txt = '''1,a1,21,31,b1
2,a2,22,32,b2
3,,23,33,b3
4,a4,,,b4'''

result = [line.split(',')[1] for line in txt.splitlines() if line.split(',')[1]]
print(result)

輸出:

['a1', 'a2', 'a4']

雖然這是一個簡短的解決方案,但以下技術上更快,因為它每行只調用一次split

txt = '''1,a1,21,31,b1
2,a2,22,32,b2
3,,23,33,b3
4,a4,,,b4'''
result = []
for line in txt.splitlines():
    desired = line.split(',')[1]
    if desired:
        result.append(desired)
print(result)

嘗試這個:

payload = '''1,a1,21,31,b1
2,a2,22,32,b2
3,,23,33,b3
4,a4,,,b4'''
col = 1  # you can extract any column
[line.split(',')[col] for line in ((payload).splitlines()) if line.split(',')[col]]  

Output:
## ['a1', 'a2', 'a4']

暫無
暫無

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

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