【问题标题】:How to make a new list of first elements from existing list of lists如何从现有列表列表中创建新的第一个元素列表
【发布时间】:2015-04-19 19:21:21
【问题描述】:

我在下面有一个列表。我需要用它来创建一个只有国家名称的新列表。 如何循环 x 以获得国家/地区名称列表?

x = [["UK", "LONDON", "EUROPE"],
     ["US", "WASHINGTON", "AMERICA"],
     ["EG", "CAIRO", "AFRICA"],
     ["JP", "TOKYO", "ASIA"]]

结果应该是这样的

UK
US
EG
JP

【问题讨论】:

标签: python list loops


【解决方案1】:

你有两种方法

使用 for 循环

countries = []

for e in x:
 countries.append(e[0])

或者使用列表推导,这在大多数情况下会是更好的选择

countries = [e[0] for e in x]

此外,如果您的数据源是生成器(在这种情况下不是),或者如果您正在对每个元素进行一些昂贵的处理(在这种情况下也不是),您可以使用 generator expression by将方括号 [] 更改为括号 ()

countries = (e[0] for e in x)

这将按需计算元素,如果数据源太长或生成器与列表推导相比也会减少内存占用。

【讨论】:

    【解决方案2】:

    由于城市LONDONWASHINGTONCAIROTOKYO 出现在列表项的第 1 位(从 0 开始)。因此,通过列表压缩从列表项中获取所有第一项。

    例如

    >>> x= [["UK", "LONDON", "EUROPE"],["US", "WASHINGTON", "AMERICA"],["EG", "CAIRO", "AFRICA"],["JP","TOKYO","ASIA"]]
    >>> [i[1] for i in x]
    ['LONDON', 'WASHINGTON', 'CAIRO', 'TOKYO']
    >>> 
    

    国家/地区相同:

    >>> [i[0] for i in x]
    ['UK', 'US', 'EG', 'JP']
    

    【讨论】:

      【解决方案3】:

      最易读的方式大概是:

      >>> data = [["UK", "LONDON", "EUROPE"],
                  ["US", "WASHINGTON", "AMERICA"],
                  ["EG", "CAIRO", "AFRICA"],
                  ["JP","TOKYO","ASIA"]]
      >>> countries = [country for country, city, continent in data]
      >>> countries 
      ['UK', 'US', 'EG', 'JP']
      

      这个list comprehension 清楚地说明了data 中每个项目中的三个值是什么,哪些将在输出中,而索引0 根本没有告诉读者太多。

      【讨论】:

        【解决方案4】:

        如果您发现自己假设数据x 始终包含[COUNTRY, CITYNAME, CONTINENT] 形式的列表,您可以从x 中的每个列表中检索每个第一个项目,如下所示:

        countries = []
        for country, cityname, continent in x:
            countries.append(country)
        

        您可以使用列表推导来缩短上述内容。

        >>> countries = [country for country, cityname, continent in x]
        

        当然,您可以通过索引访问该值。

        >>> countries = [lst[0] for lst in x]
        

        【讨论】:

          【解决方案5】:

          您还可以解压列表并附加到新列表:

          x= [["UK", "LONDON", "EUROPE"],["US", "WASHINGTON", "AMERICA"],["EG", "CAIRO", "AFRICA"],["JP","TOKYO","ASIA"]]
          
          countries = []
          
          for a,b,c in x:
              countries.append(a)
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2020-09-07
            • 1970-01-01
            • 1970-01-01
            • 2018-07-08
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多