Python 什么';什么是打开冰冻套装列表的最佳方式?

Python 什么';什么是打开冰冻套装列表的最佳方式?,python,python-3.x,Python,Python 3.x,不允许使用任何导入 输入: [frozenset({1}), frozenset({32}), frozenset({40}), frozenset(), frozenset({76})] 期望输出: [1,32,40,76] 我在寻找一种简洁的方法。我知道如何使用muli-line-for循环将其解包。我们可以在冻结集列表中迭代,并将其数据类型更改为list l=[frozenset({1})、frozenset({32})、frozenset({40})、frozenset()、fro

不允许使用任何导入

输入:

[frozenset({1}), frozenset({32}), frozenset({40}), frozenset(), frozenset({76})]
期望输出:

[1,32,40,76]

我在寻找一种简洁的方法。我知道如何使用muli-line-for循环将其解包。

我们可以在冻结集列表中迭代,并将其数据类型更改为list

l=[frozenset({1})、frozenset({32})、frozenset({40})、frozenset()、frozenset({76})]
arr=[]
对于l中的元素:
新建=列表(元素)
如果是新的!=[]:
arr.append(新[0])
打印(arr)

我们可以在frozenset列表中迭代,并将其数据类型更改为list

l=[frozenset({1})、frozenset({32})、frozenset({40})、frozenset()、frozenset({76})]
arr=[]
对于l中的元素:
新建=列表(元素)
如果是新的!=[]:
arr.append(新[0])
打印(arr)

您可以使用列表理解来生成输出。为了提取每个frozenset中的值,您可以在其上创建一个迭代器,并使用迭代器的
next()
方法获取第一个唯一值(如果该值不为空):

lst =  [frozenset({1}), frozenset({32}), frozenset({40}), frozenset(), frozenset({76})]

out = [next(iter(fset)) for fset in lst if fset]

print(out)
# [1, 32, 40, 76]

您可以使用列表理解来生成输出。为了提取每个frozenset中的值,您可以在其上创建一个迭代器,并使用迭代器的
next()
方法获取第一个唯一值(如果该值不为空):

lst =  [frozenset({1}), frozenset({32}), frozenset({40}), frozenset(), frozenset({76})]

out = [next(iter(fset)) for fset in lst if fset]

print(out)
# [1, 32, 40, 76]


我就是不知道怎么。。。为什么这是一个糟糕的问题?我知道这很容易为什么在一个好的函数中包装多行for循环不够?你应该包括你当前的代码,这将是要求更简洁的方法的起点。第一个答案是我的意思。这是最明显和最清楚的。但我想知道这个问题是否有一个简单的解决方案。如果没有,你可以简单地说不。关于你关于改进你的问题的评论:否决票是匿名的,一般的共识是避免在否决票时发表评论。一次否决票没什么不寻常的,所以你不应该太担心它。猜测可能的原因:您没有包括您当前的尝试,这可能会使您的问题看起来像“为我编写此代码”,这在这里经常遭到反对(反对票的原因是“没有显示研究成果”)。同时,它也为你所认为的“不够简洁”提供了参考,使你的期望更加清晰。我根本不知道如何……为什么这是一个糟糕的问题?我知道这很容易为什么在一个好的函数中包装多行for循环不够?你应该包括你当前的代码,这将是要求更简洁的方法的起点。第一个答案是我的意思。这是最明显和最清楚的。但我想知道这个问题是否有一个简单的解决方案。如果没有,你可以简单地说不。关于你关于改进你的问题的评论:否决票是匿名的,一般的共识是避免在否决票时发表评论。一次否决票没什么不寻常的,所以你不应该太担心它。猜测可能的原因:您没有包括您当前的尝试,这可能会使您的问题看起来像“为我编写此代码”,这在这里经常遭到反对(反对票的原因是“没有显示研究成果”)。此外,它也会为你所认为的“不够简洁”提供参考,使你的期望更清晰。[]:如果是新的,简单地说就是
,as列表(更一般地说,所有容器对象,如集合、dict以及字符串)如果不是空的,则在布尔上下文中被视为
True
。很好的解释。我被单行程序卡住的真正原因是我没有正确地编写fset
部分。请注意,如果是新的,则编写
部分更为常见[]:
如果是新的,简单地说就是
,as列表(更一般地说,所有容器对象,如集合、dict以及字符串)如果不是空的,则在布尔上下文中被视为
True
。很好的解释。我被单行程序卡住的真正原因是我没有正确地编写fset的
部分。我可以问一个后续问题吗?当我单独测试时,您的代码运行良好。我真的想把它包括在回程线上。所以我使用了“return[next(iter(I)for I in lst if I)]”,我得到了[]。。有什么线索吗?你把括号弄混了-这是
[下一步(iter(i))
你的表达式创建了一个生成器表达式
(iter(i)表示lst中的i,如果i)
,这会在每个frozenset上生成迭代器,对其调用
next
,会返回这些迭代器中的第一个。是的..>\uuu''我的错。编码太晚了。再次感谢!我可以问一个后续问题吗?当我单独测试它时,您的代码运行良好。我想实际将其包含在返回行中。因此我使用了“return[next”(iter(I))我得到了[]任何线索吗?你把括号弄错了-它是
[下一步(iter(i))
你的表达式创建了一个生成器表达式
(iter(i)for i in lst if i)
,它在每个frozenset上生成迭代器,并在其上调用
next
返回这些迭代器中的第一个。是的..>\uuu''我的错。编码太晚了。再次感谢您!