如何更改嵌套列表中的值的变量类型

时间:2020-11-10 17:39:20

标签: python python-3.x function nested-lists

我想尽可能地更改字符串的变量类型。 (“ 6”将转换为6,“ 7.8”将转换为7.8,“ true”将转换为True,“ null”或空字符串将转换为None)

到目前为止,这是我的代码:

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>

<xsl:template match="/data">
    <xsl:copy>
        <xsl:for-each select="post">
            <xsl:sort select="Title"/>
            <xsl:copy-of select="."/>
        </xsl:for-each>
    </xsl:copy>
</xsl:template>

</xsl:stylesheet>

运行代码后,variables_to_convert应该为[['abc',123,123.4,True,False,None]],但是,我只是再次获得了原始值。我是否还缺少初学者可以看到的东西?或者这是一些逻辑错误?

我向任何认为我的代码混乱或混乱的人致歉。这只是我要做的一个小功能,因此我没有花太多时间使它看起来不错。预先感谢!

2 个答案:

答案 0 :(得分:3)

在循环中,变量不会直接引用列表,因此要更改任何值,您需要按索引引用原始列表,为此,您可以使用enumerate

from typing import List


def change_variable_type(variables: List[List[str]]) -> None:
    for sublist in variables:
        for index, element in enumerate(sublist):
            if element:
                if element.isnumeric():
                    sublist[index] = int(element)
                elif element.replace('.', '').isnumeric():
                    sublist[index] = float(element)
                elif element.lower() == 'true':
                    sublist[index] = True
                elif element.lower() == 'false':
                    sublist[index] = False
            else:
                sublist[index] = None
    return variables


variables_to_convert = [['abc', '123', '123.4', 'true', 'False', '']]
change_variable_type(variables_to_convert)
print(variables_to_convert)

输出:

[['abc', 123, 123.4, True, False, None]]

答案 1 :(得分:0)

您可以将变量重新分配回子列表:

def change_type(element):
     if element.isnumeric(): #Checks if it's a number and converts to a float
        element = float(element)

        if element == int(element): #Checks if it can be an int, and converts if it can
           element = int(element)
        return element

     elif element.lower() == 'false': #Checks if it can be False, and converts if it can
        return False

     elif element.lower() == 'true': #Checks if it can be True, and converts if it can
        return True

     elif element == 'null' or element == '': #Checks if it can be None, and converts if it can
        return None
     return element
    
def change_variable_type(variables):
    for sublist in variables:
        for index, element in enumerate(sublist):
            sublist[index] = change_type(element)

variables_to_convert = [['abc', '123', '123.4', 'true', 'False', '']]
change_variable_type(variables_to_convert)
print(variables_to_convert)

根据要求输出