Python 如何在不存储在临时数组中的情况下对数组切片使用strip()
我至少有这样的数据:Python 如何在不存储在临时数组中的情况下对数组切片使用strip(),python,Python,我至少有这样的数据: Probes FOO BAR 1452463_x_at 306.564 185.705 1439374_x_at 393.742 330.495 1426392_a_at 269.850 209.931 1433432_x_at 636.145 487.012 在第二列中,制表符后面包含空格 import sys import csv import pprint with open('tmp.txt') as ts
Probes FOO BAR
1452463_x_at 306.564 185.705
1439374_x_at 393.742 330.495
1426392_a_at 269.850 209.931
1433432_x_at 636.145 487.012
在第二列中,制表符后面包含空格
import sys
import csv
import pprint
with open('tmp.txt') as tsvfile:
tabreader = csv.reader(tsvfile,delimiter="\t");
for row in tabreader:
#val = s.strip() for s in [row[1:3]]
val = row[1:3]
print val
以下是打印此文件的代码:
['FOO', 'BAR']
['306.564 ', '185.705']
['393.742 ', '330.495']
['269.850 ', '209.931']
['636.145 ', '487.012']
现在我要做的是在遍历行的同时动态地去除空白,
无需将值存储在临时数组中。
尤其是这一行:
#val = s.strip() for s in [row[1:3]]
但为什么失败了呢?怎么做你的语法错了。您需要一个列表:
val = [s.strip() for s in row[1:3]]
现在,我不确定你想要什么,但我已经创建了一个新的列表。这是没有办法的
1您可以使用显式循环,在将值重新分配到原始列表时剥离这些值,但是。。。哎呀
如果确实需要,可以通过以下方式对行进行原地变异:
row[:] = [s.strip() for s in row[1:3]]
但我不完全确定您在这里会获得什么优势。在python中有一个概念。这是列表理解的延迟评估版本,不会立即创建结果列表。但是,普通的print
不会导致生成器求值,因此需要在打印之前将其转换为list
因此,对于您的代码,它应该如下所示(注意圆括号)
在您的示例中,使用生成器表达式与列表理解相比并没有任何优势,因为您要立即打印结果。如果您需要对巨大的列表执行一些额外的处理,这可能非常方便,因为生成器表达式不分配保存结果所需的内存,因此可以减少内存占用
简而言之:列表理解的工作原理类似于range
(分配列表并立即用数据填充),生成器表达式的工作原理类似于xrange
(按需生成下一项)
for row in tabreader:
val = (s.strip() for s in row[1:3])
print list(val)