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
。