【问题标题】:Explain the parenthesis syntax used in map解释 map 中使用的括号语法
【发布时间】:2021-08-21 16:43:44
【问题描述】:

我正在尝试使用 lambda 函数删除元组中的浮点数。 我正在切片元组并将元组中的最后一个元素转换为 int 并将其连接起来。

xyz = list((filter(lambda x : x[2].is_integer(), sides_triplet )))

print(xyz)
xy = list(map(lambda tup : tup[:2] + (int(tup[2]),), xyz))
print(xy)

输出:

[(3, 4, 5.0), (6, 8, 10.0)]
[(3, 4, 5), (6, 8, 10)]

代码运行良好,但我的问题是:

xy = list(map(lambda tup : tup[:2] + (int(tup[2]),), xyz))

需要解释为什么我们使用逗号,然后在 int 之后关闭大括号。 相反,如果我使用下面的行,它会抛出一个错误,这是为什么呢?

xy = list(map(lambda tup : tup[:2] + (int(tup[2])), xyz))

输出:

 xy = list(map(lambda tup : tup[:2] + (int(tup[2])), xyz))
TypeError: can only concatenate tuple (not "int") to tuple

【问题讨论】:

  • 共享输入和预期输出
  • 您的括号需要匹配。 “EOF 错误”是因为解释器正在寻找最后一个结束括号来完成语句,并且它在找到文件之前就到达了文件的末尾 (EOF)。添加缺少的括号将其修复。
  • @balderman 我编辑了我的帖子,其中显示了输入 xyz = [(3, 4, 5.0), (6, 8, 10.0)]。我正在尝试通过切片和连接来删除浮动
  • 这看起来与stackoverflow.com/questions/68815174/… 完全相同,其中实际问题是“什么是元组”:\
  • 只是为了解释区别,(int(tup[2]) 只是返回一个 int 而不是一个元组。您需要添加尾随逗号来告诉 python 这是一个具有单个值的元组。 (int(tup[2],)

标签: python python-3.x


【解决方案1】:

见下文

data = [(3, 4, 5.0), (6, 8, 10.0)]
new_data = [(x[0], x[1], int(x[2])) for x in data]
print(new_data)

输出

[(3, 4, 5), (6, 8, 10)]

【讨论】:

  • @redpy 我很高兴能帮上忙。随意投票。
【解决方案2】:

要理解和回答关于为什么在右括号之前需要逗号以及为什么不包含逗号时它会失败的问题。

当你想在 python 中创建一个具有单个值的元组时,你需要用逗号结束它来告诉 python 这是一个具有单个值的元组。其他明智的python认为它只是一个表达式,并将评估它并返回该表达式的值(在这种情况下是一个int)

first = (int("1"))
second = (int("1"),)

print(f"type={type(first)}, value={first}")
print(f"type={type(second)}, value={second}")

输出

type=<class 'int'>, value=1
type=<class 'tuple'>, value=(1,)

如果没有逗号,它在您的示例中不起作用,因为您试图将第一个值(元组)连接到第二个值 int,而 python 不允许这样做。通过添加逗号,您可以创建一个具有单个值的元组,该值是一个 int。然后可以将它们连接在一起,因为它们都是元组。

【讨论】:

  • 谢谢你的解释!! :) 。它对每个人都非常有帮助!
猜你喜欢
  • 1970-01-01
  • 2022-12-12
  • 1970-01-01
  • 1970-01-01
  • 2020-08-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多