如何在 Python 中编写列表理解而不是嵌套循环?

问题描述 投票:0回答:2

我在 python 中处理不同的数据帧。第一个名为 cities 的数据框如下所示:

                         city  Population              NBA
0               New York City    20153634      Knicks Nets
1                 Los Angeles    13310447  Lakers Clippers
2      San Francisco Bay Area     6657982         Warriors
3                     Chicago     9512999    Bulls[note 9]
4           Dallas–Fort Worth     7233323        Mavericks

第二个名为 nba_df 的数据框如下所示:

                  team   W   L   W/L%    GB   PS/G   PA/G   SRS  year League
0      Toronto Raptors  59  23  0.720   0.0  111.7  103.9  7.29  2018    NBA
1       Boston Celtics  55  27  0.671   4.0  104.0  100.4  3.23  2018    NBA
2   Philadelphia 76ers  52  30  0.634   7.0  109.8  105.3  4.30  2018    NBA
3  Cleveland Cavaliers  50  32  0.610   9.0  110.9  109.9  0.59  2018    NBA
4       Indiana Pacers  48  34  0.585  11.0  105.6  104.2  1.18  2018    NBA

我想做的是根据团队名称确定团队所在的位置。对于前。费城 76 人队位于费城。为此,我在下面写了一个嵌套循环:

city = []
for i in nba_df['team']:
    added = False
    for j in i.split():
        for k in cities['city']:
            for l in k.split():
                if j == l and added == False:
                    city.append(k)
                    added = True
    if added == False:
        city.append('Not in list')
    
nba_df['city'] = city

循环遍历 nba_df['team'] 并拆分字符串并迭代 cities['city'] 列上的每个单词,这些列也被拆分,如果一个单词与另一个匹配,那么城市名称将是添加到列表中。否则它将被添加为不在列表中。我知道它有一些错误,如果在以新奥尔良为例之前迭代纽约市会发生什么?它将纽约市添加到列表中并跳过其余部分。所以它可能会附加错误的城市。不管怎样,代码做我想做的,但我想用列表理解来写它。因为它对我来说看起来很业余。 我试过这样的事情:

city = [k if j == l for l in k.split() in [k for k in cities['city'] in [j for j in i.split() in [i for i in nba_df['team']]]]]

但是当然没用。它在开头的

l for l
上引发了 sytanx 错误指向。 我要求你检查我的循环,我想知道你会如何重写它?列表理解或其他方式。你将如何解决这个问题? 谢谢。

python loops list-comprehension
2个回答
1
投票

你忘记了列表理解中第一个 split() 的大括号。


1
投票

试试这个:

city = [k if j == l for l in k.split() in [k for k in cities['city'] in [j for j in i.split() in [i for i in nba_df['team']]]]]

而不是这个:

city = [k if j == l for l in k.split in [k for k in cities['city'] in [j for j in i.split() in [i for i in nba_df['team']]]]]
© www.soinside.com 2019 - 2024. All rights reserved.