繁体   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