Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/339.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何在不存储在临时数组中的情况下对数组切片使用strip()_Python - Fatal编程技术网

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)