【问题标题】:Mixed data in 2D list二维列表中的混合数据
【发布时间】:2021-04-15 03:55:36
【问题描述】:

我有一个 2D 列表,我添加了几行。每行由一个字符串和 3 个浮点数组成。

filmRatings = [ [ "Lion", 9.8, 7.2 , 9.5 ] ]
filmRatings.append( ["Transformers" , 3.7 , 6.8 , 5.2] )
filmRatings.append( ["Pirates of the Caribbean" , 6.1 , 4.9 , 7.3] )
filmRatings.append( ["Moana" , 8.2 , 7.9 , 6.7] )
filmRatings.append( ["War Games" , 7.3 , 8.1 , 7.7] )
    
print(filmRatings)

total = 0.0
for i in range(len(filmRatings[0])):
    total = total + filmRatings[0][i]
    print(total)

我只想将第一行 [0] 中的浮点值相加,但需要避免 [0][0] 中的字符串值。 基本上我想要做的只是想忽略列表的字符串元素并将浮点数相加,也许某种过滤器是要走的路,但我不确定,因为我知道有几种方法可以给正如他们所说的那样。

提前致谢:)

【问题讨论】:

    标签: python list sorting filter 2d


    【解决方案1】:

    我想要做的只是想忽略列表的字符串元素

    数组切片是这项工作的完美工具。

    在您的每个列表中,第 0 个元素是一个字符串

    example_list = [ "Lion", 9.8, 7.2 , 9.5 ]
    

    所以你想要做的就是分割那个列表

    print(example_list[1:len(example_list)]) # [9.8, 7.2, 9.5]
    

    正如您在此处看到的,此 [index1:index2] 语法选择从索引 index1 - 1 开始到 index2 - 1 结束的列表项。所以它从1而不是0开始计数

    所以在你的情况下,你所要做的就是

    total = 0.0
    # Here creating a new array consisting only of the numbers without the string 
    filmRatingsWithoutString = filmRatings[0][1:len(filmRatings[0])]
    for i in range(len(filmRatingsWithoutString)):
        total = total + filmRatingsWithoutString[i]
        print(total)
    

    还有一件事。

    您可以直接使用example_list[1:] 继续直到结束,而不是使用example_list[1:len(example_list)]

    也许某种过滤器是要走的路

    如果你想用 filtering 来做到这一点,你可以简单地使用 if 语句来检查该值是否是一个字符串,然后照常继续。

    # Only allow strings here
    filmRatingsWithoutString = [
        item for item in filmRatings[0] if type(item) != str
    ]
    

    【讨论】:

    • 谢谢,这是有道理的,本质上是从原始列表的位置 1 创建一个新列表,从而忽略字符串。
    • 或者只是创建一个新列表,然后附加不是字符串的所有内容,因此“过滤”。
    【解决方案2】:

    您可以使用列表推导过滤列表并获取所有浮点数

    [i for i in filmRatings[0] if type(i) is float]
    

    你可以像这样使用 sum 函数来添加它们

    sum([i for i in filmRatings[0] if type(i) is float])
    

    【讨论】:

    • 好的,我明白了,我刚刚创建了新变量和中提琴,我对列表理解中的方括号仍然有些困惑。再次感谢您的帮助
    • 你可以阅读更多关于列表理解的链接stackoverflow.com/questions/19104760/…
    猜你喜欢
    • 2018-02-03
    • 1970-01-01
    • 1970-01-01
    • 2013-06-22
    • 1970-01-01
    • 2011-07-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多