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