[英]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.