Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/314.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.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 从列表中剥离并转换值/数字_Python_List_List Comprehension - Fatal编程技术网

Python 从列表中剥离并转换值/数字

Python 从列表中剥离并转换值/数字,python,list,list-comprehension,Python,List,List Comprehension,我有以下工作: address = [] for row in ws.iter_rows(row_offset=4,column_offset=3): if len(row) > 0: cell = row[2] if cell.internal_value is not None: *something here, append appropriate cell values to address* print addr

我有以下工作:

address = []

for row in ws.iter_rows(row_offset=4,column_offset=3):
    if len(row) > 0:
        cell = row[2]
        if cell.internal_value is not None: 
           *something here, append appropriate cell values to address*

print address
return address
它将成功地遍历excel电子表格中的一列,并获取每个非空单元格。但是,在星号处,我不确定如何通过并只提取数字。我知道读起来可能有些奇怪,但我需要的数字是“1.0、2.0、3.0、4.0等等”。当我在不同的电子表格中阅读时,所有其他部分以及实际数字本身都可能发生变化,但它们的格式是相同的

所以我需要知道的是,我如何遍历这个列表,去掉所有不是十进制数的东西,然后理想地将这些十进制数转换成整数

我也确信有一个很好的方法可以通过列表理解来实现这一点,但我只在python中编程了一周,所以我不知道如何真正做到这一点

抱歉,如果这让人困惑,请提前感谢您的帮助。

,但这应该足够了

>>> def is_float(n):
...     try:
...         float(n)
...         return True
...     except ValueError:
...         return False
>>> x = ["garbage", "1.0", "trash", "2.0"]
>>> [i for i in x if is_float(i)]
['1.0', '2.0']
您可以这样做:

int_values = [int(v) for v in cell.internal_values if type(v) == float]
或者,我注意到这些值由一个项目分隔,因此您可能也需要:

int_values = [int(cell.internal_values[i]) for i in xrange(1, len(cell.internal_values), 2)]
(您可能需要使用range(1,…),因为应该丢弃第一个,模式从索引1开始)

所以我需要知道的是我将如何通过这个列表并摆脱它 所有不是十进制数的数字,理想情况下,将它们转换为十进制数 小数变成整数

由于列表包含浮点数,而不是浮点数字符串:

only_floats = [i for i in big_list if isinstance(float,i)]

我将这个答案添加为“第一部分”,以防将来有人需要第一部分的解决方案。问题的第二部分(将浮点列表转换为int)在可接受的答案中

为了删除所有浮动,原始算法修改为:

addr = []

for row in ws.iter_rows(row_offset=4,column_offset=3):
    if row:
        cell = row[2]
        try:
            addr.append(float(cell.internal_value))
        except ValueError:
            pass
        except TypeError:
            pass

address = [int(v) for v in addr if type(v) == float]

最后一行是已接受答案中的代码。算法修改实际上是其他人在这里的工作,但帖子被删除了!谢谢神秘用户,我希望我能在这里信任你。

但它不是字符串,而是浮点@蒂姆:我认为你的想法是正确的,但jadkik94也是正确的。这些值已经是一个浮点值,需要变成一个inti。我先试试。正如我在最初的帖子中所说,模式是任意的,并且每次都可能(读:will)改变,所以我不确定是否有必要获得具体的信息:)使用
isinstance(v,float)
而不是检查
type