【问题标题】:For loop not iterating as desired in Python在 Python 中,for 循环未按需要进行迭代
【发布时间】:2021-12-09 20:08:21
【问题描述】:

我有一个包含要发送的电子邮件和链接的数据框。 我用来遍历列表并将其对应链接发送给每个用户的代码 sn-p 是:

boton_list=[]
for arch, user in enumerate(df_enlaces['CorreoElectronico'].values):

  enlace=df_enlaces.set_index('CorreoElectronico').loc[user]['Enlace']
  
  conteo=0
  print(arch,user,enlace)
  
  while conteo<(len(enlace)):
    boton=f"""<a href={enlace[arch]} > <button style='background-color: orange'; border-color:blue> LINK </button> </a>"""
    boton_list.append(boton)
    conteo+=1

但是,“print(enlace)”会打印以下内容:

我的数据框看起来像:

只有两行和一个用户(在本例中)并返回 4 行?

此外,boton_list 返回:

["<a href=link1 > <button style='background-color: orange'; border-color:blue> LINK </button> </a>",
 "<a href=link1 > <button style='background-color: orange'; border-color:blue> LINK </button> </a>",
 "<a href=link2 > <button style='background-color: orange'; border-color:blue> LINK </button> </a>",
 "<a href=link2 > <button style='background-color: orange'; border-color:blue> LINK </button> </a>"]

不返回与第一行对应的链接1。 我错过了一些东西,我不知道该怎么做。

【问题讨论】:

  • boton_list=[] 不应在循环中。您重置 df 每一行的列表。
  • 好的,我将 boton_list 放在外面,但现在打印 4 个元素。如何让它只打印两个?链接 1 和链接 2。查看我的编辑

标签: python for-loop while-loop


【解决方案1】:

如果我理解正确,你不需要循环,直接应用你的格式:

button_template = """<a href={}><button style='background-color: orange'; border-color:blue> LINK </button> </a>"""
df_enlaces['Enlace'] = df_enalces['Enlace'].transform(lambda c: button_template.format(c))

现在您可以将其导出到列表中:

df_enlaces['Enlace'].to_list()

或者,如果您想要多个用户/电子邮件的嵌套列表:

df_enlaces.groupby('CorreoElectronico').agg(buttons=('Enlace', list))['buttons'].to_list()

【讨论】:

  • 优雅的解决方案。但是我将如何根据用户对数组进行切片呢?想象有一封电子邮件“email2@example.com”,它只有link1
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-27
  • 2023-03-05
  • 1970-01-01
  • 2020-10-21
  • 2019-11-28
  • 2016-01-18
相关资源
最近更新 更多