Python 从单个浮点数或浮点数列表创建平面列表
我希望使用父类函数在对象的zip上迭代并一起浮动。有时子类在一个列表中有三个对象和三个浮动,这很好:Python 从单个浮点数或浮点数列表创建平面列表,python,Python,我希望使用父类函数在对象的zip上迭代并一起浮动。有时子类在一个列表中有三个对象和三个浮动,这很好: L = [A,B,C] F = [1,2,3] for f, o in zip(L,F): # do stuff 有时子类有一个对象和一个float L = A F = 1 for f, o in zip(L,F): # TypeError 这会引发异常,因为F不可iterable 如果我尝试: F = list(F) F = [F] 这适用于2个或多个浮点,但对单个
L = [A,B,C]
F = [1,2,3]
for f, o in zip(L,F):
# do stuff
有时子类有一个对象和一个float
L = A
F = 1
for f, o in zip(L,F):
# TypeError
这会引发异常,因为F不可iterable
如果我尝试:
F = list(F)
F = [F]
这适用于2个或多个浮点,但对单个浮点抛出异常(它仍然不可iterable:)
如果我尝试:
F = list(F)
F = [F]
这解决了1浮点数的情况,但现在当有两个或更多浮点数时,会返回一个嵌套列表
a = [1,2]
[a] = [[1,2]]
是否有一种简单的内置方式来接收单个浮点或浮点列表并返回单个平面列表?或者我需要像itertools.chain这样的东西吗?只要检查一下您是否已经有了一个列表,如果没有创建一个包含单个元素的列表:
f = f if isinstance(f,list) else [f]
例如:
>>> f = 1
>>> f = f if isinstance(f,list) else [f]
>>> f
[1]
>>> f = [1,2]
>>> f = f if isinstance(f,list) else [f]
>>> f
[1, 2]
注意,我假设您使用的是list
s,但您可以使用collections.Iterable
来获得更通用的解决方案
进一步注意,我不知道
F
/F
是从哪里来的,但理想情况下,它最初是以这种方式创建的,而不是现在修复它。只需检查您是否已经有一个列表,如果没有创建一个包含单个元素的列表:
f = f if isinstance(f,list) else [f]
例如:
>>> f = 1
>>> f = f if isinstance(f,list) else [f]
>>> f
[1]
>>> f = [1,2]
>>> f = f if isinstance(f,list) else [f]
>>> f
[1, 2]
注意,我假设您使用的是list
s,但您可以使用collections.Iterable
来获得更通用的解决方案
进一步注意,我不知道
F
/F
是从哪里来的,但理想情况下,它最初是以这种方式创建的,而不是现在修复它。如果存在(a,collections.Iterable)或者[a],您可以尝试a=a。这将确保a是可编辑的或将其转换为列表。另外,您不需要转换a,您可以将结果分配给另一个变量。如果是instance(a,collections.Iterable),您可以尝试a=a,否则[a]
。这将确保a是可编辑的或将其转换为列表。您也不需要转换,您可以将结果分配给另一个变量。您可以设计对象,使其具有内置的\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
class CertainObject:
def __init__(self):
self.variables = [23, 4, 2]
def __len__(self):
return len(self.variables)
def __iter__(self):
for i in self.variables:
yield i
案例1(多个对象):
案例1(单个对象):
使用\uuuu iter\uuuuu
,在对象实例上迭代不会产生错误。您可以设计对象,使其具有内置的\uuuuuuu iter\uuuuu
方法以及\uu len\uuuuu
:
class CertainObject:
def __init__(self):
self.variables = [23, 4, 2]
def __len__(self):
return len(self.variables)
def __iter__(self):
for i in self.variables:
yield i
案例1(多个对象):
案例1(单个对象):
使用\uuuu iter\uuuu
,在对象实例上迭代不会产生错误。您可以使用返回嵌套列表的大小写,然后将列表强制转换为numpy数组,并使用flatte()函数,如果需要,再将其重新转换为列表
a = list(np.array(a).flatten())
这样,a=1将变成[1],a=[1,2]将变成[1,2],a=[1,2]]将变成[1,2],因此所有输出都是列表。您可以使用返回嵌套列表的大小写,但随后将列表强制转换为numpy数组,并使用flatte()函数,如果需要,再将其重新转换为列表
a = list(np.array(a).flatten())
这样,a=1将变成[1],a=[1,2]将变成[1,2],a=[1,2]]将变成[1,2],因此所有输出都是列表。
这不会给您一个项目列表和多个项目列表带来问题(不会嵌套)
示例1项目:
奥普特
11
示例更多项目
输出
使用扩展
这不会给您一个项目列表和多个项目列表带来问题(不会嵌套)
示例1项目:
奥普特
11
示例更多项目
输出
你的意思是[a]
不是列表(a)
但是是的,我们有相同的想法;)你的意思是[a]
不是列表(a)
但是是的,我们有相同的想法;)