Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/293.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_Nested Lists - Fatal编程技术网

Python 嵌套列表-要浮动的字符串

Python 嵌套列表-要浮动的字符串,python,nested-lists,Python,Nested Lists,我有以下表单的嵌套列表: my_list = [['Some1', '2', '3.6', '4.5', 'GB2', '6'], ['Some2', '3.9', '4', '5', 'HG5', '7.3'], ['Some3', '4', '5', '6.1', 'H2D', '8.9']] 每个子列表的每个元素都是一个字符串,但我想将所有纯数字字符串转换为浮点 因此,我尝试以下代码: for row in my_list: for k

我有以下表单的嵌套列表:

my_list = [['Some1', '2', '3.6', '4.5', 'GB2', '6'],
           ['Some2', '3.9', '4', '5', 'HG5', '7.3'],
           ['Some3', '4', '5', '6.1', 'H2D', '8.9']]
每个子列表的每个元素都是一个字符串,但我想将所有纯数字字符串转换为浮点

因此,我尝试以下代码:

for row in my_list:
    for k, item in enumerate(row):
        if k in (1, 2, 3, 5):
            item = float(item)

不幸的是,嵌套列表保持不变。我肯定我犯了一个简单的错误,但我看不出来。任何帮助(和上下文)都将不胜感激。

重新指定名称
将永远不会更改列表。请尝试以下方法:

for row in my_list:
    for k in (1, 2, 3, 5):
        row[k] = float(row[k])
请注意,Python名称只是附加到某些对象的标记。线条

item = float(item)

将计算
float(item)
,然后将名称
item
绑定到返回的对象。这对前面指向的对象
没有任何作用。此外,在这种情况下,不可能对后一个对象进行适当的变异——字符串是不可变的。

重新指定名称
将永远不会更改列表。请尝试以下方法:

for row in my_list:
    for k in (1, 2, 3, 5):
        row[k] = float(row[k])
请注意,Python名称只是附加到某些对象的标记。线条

item = float(item)

将计算
float(item)
,然后将名称
item
绑定到返回的对象。这对前面指向的对象
没有任何作用。此外,在这种情况下,不可能对后一个对象进行适当的变异——字符串是不可变的;您只需从一些元素中创建一个float,然后依次为其命名为“item”。你可以用像这样的东西

row[k] = float(item)
def floatify(x):
    try:
        return float(x)
    except ValueError:
        return x

my_list2 = [[floatify(x) for x in row] for row in my_list]
row[k] = float(item)
但我可能会这样做

row[k] = float(item)
def floatify(x):
    try:
        return float(x)
    except ValueError:
        return x

my_list2 = [[floatify(x) for x in row] for row in my_list]
row[k] = float(item)

您没有影响原始列表;您只需从一些元素中创建一个float,然后依次为其命名为“item”。你可以用像这样的东西

row[k] = float(item)
def floatify(x):
    try:
        return float(x)
    except ValueError:
        return x

my_list2 = [[floatify(x) for x in row] for row in my_list]
row[k] = float(item)
但我可能会这样做

row[k] = float(item)
def floatify(x):
    try:
        return float(x)
    except ValueError:
        return x

my_list2 = [[floatify(x) for x in row] for row in my_list]
row[k] = float(item)

您需要将行元素重新指定给新的计算值,例如


您需要将行元素重新指定给新的计算值,例如


在这种情况下,像DSM建议的那样创建my_list2的for循环或列表理解,哪一个会被认为更像Pythonic?你喜欢其中一个还是另一个?我的实际列表可以达到100000多行。@PatrickD:这两个答案有不同的作用。我的答案中的代码改变了原来的列表。DSM答案中的代码创建了一个新列表。另一个区别是,我的答案中的代码硬编码要转换的列,如果某些值无法转换,则会出错。DSM答案中的代码尝试转换每个项目,如果转换成功,则使用浮点值而不是原始值。如果您需要这些语义,那么这个答案中的代码速度更快,占用的内存更少。在这种情况下,像DSM建议的那样创建my_list2的for循环或列表理解会被认为更具Pythonic风格?你喜欢其中一个还是另一个?我的实际列表可以达到100000多行。@PatrickD:这两个答案有不同的作用。我的答案中的代码改变了原来的列表。DSM答案中的代码创建了一个新列表。另一个区别是,我的答案中的代码硬编码要转换的列,如果某些值无法转换,则会出错。DSM答案中的代码尝试转换每个项目,如果转换成功,则使用浮点值而不是原始值。如果您需要这些语义,那么这个答案中的代码速度更快,占用的内存更少。