双重" for"在列表理解中工作?

时间:2018-01-04 10:24:59

标签: python python-3.x pandas

因此,对于出现此问题的问题的背景,请参阅此link

正如接受的答案所示,我继续提供所提供的代码,并且能够完成我最初想要的。但制作字典不是我的最终目标。我对该词典的最终目标是将其转换为DataFrame,我能够这样做。 这是我做的:

df = pd.DataFrame(([st, cty] for st, cty in dic.items() for cty in dic[st]), 
                    columns = ["State", "City"])

为了您的准备参考,dic变量如下:

{'Alabama': ['Auburn',
  'Florence',
  'Jacksonville',
  'Livingston',
  'Montevallo',
  'Troy',
  'Tuscaloosa',
  'Tuskegee'],
 'Alaska': ['Fairbanks'],
 'Arizona': ['Flagstaff', 'Tempe', 'Tucson'],
 'Arkansas': ['Arkadelphia',
  'Conway',
  'Fayetteville',
  'Jonesboro',
  'Magnolia',
  'Monticello',
  'Russellville',
  'Searcy'],
 'California': ['Angwin',
  'Arcata',
  'Berkeley',
  'Chico',
  'Claremont',
  'Cotati',
  'Davis',
  'Irvine',
  'Isla Vista',
  'University Park, Los Angeles',
  'Merced',
  'Orange',
  'Palo Alto',
  'Pomona',
  'Redlands',
  'Riverside',
  'Sacramento',
  'University District, San Bernardino',
  'San Diego',
  'San Luis Obispo',
  'Santa Barbara',
  'Santa Cruz',
  'Turlock',
  'Westwood, Los Angeles',
  'Whittier'],
 'Colorado': ['Alamosa',
  'Boulder',
  'Durango',
  'Fort Collins',
  'Golden',
  'Grand Junction',
  'Greeley',
  'Gunnison',
  'Pueblo, Colorado'],
 'Connecticut': ['Fairfield',
  'Middletown',
  'New Britain',
  'New Haven',
  'New London',
  'Storrs',
  'Willimantic'],
 'Delaware': ['Dover', 'Newark'], .... all the other states with their city names

运行上面代码后得到的输出如下(截图): enter image description here

我的疑问是:虽然我得到了所需的输出,虽然我已经制定了" DataFrame理解",可以这么说,我自己,我并不完全理解双for

有人可以解释另一个for内的for在这种情况下的确切作用。我是熊猫的初学者。

1 个答案:

答案 0 :(得分:3)

这是一个发电机,与Pandas无关。

术语([x, y] for x in q for y in p)是Python生成器。您可以将此值分配给变量,例如g = ([x, y] for x in q for y in p),然后将迭代器分配给它:

for element in g:
    print(element)

Pandas此时接受生成器并迭代它们以获取DataFrame的所有值。

for的评估如下:

for x in q:
    for y in p:
        yield [x, y]

所以这个生成器产生的是qp中所有元素组合的平面列表。