从单个浮点或浮点列表创建平面列表

时间:2017-12-08 17:38:24

标签: python

我想迭代一个对象的zip并使用父类函数浮动在一起。有时子类在列表中有三个对象和三个浮点数,这很好用:

class PlayableActivity : AppCompatActivity() { ... }

有时子类有一个对象和一个浮点

L = [A,B,C]
F = [1,2,3]

for f, o in zip(L,F):
    # do stuff

这会引发异常,因为F不可迭代。

如果我尝试:

L = A
F = 1

for f, o in zip(L,F):
    # TypeError

这适用于2个或更多浮点数,但会抛出一个浮点数(它仍然不能迭代:)。

如果我尝试:

F = list(F)

这解决了1浮点大小写,但是当有两个或更多浮点数时,现在返回一个嵌套列表!

F = [F]

是否有一种简单的内置方式来接收单个浮点数或浮点数列表并返回单个平面列表?或者我需要像itertools.chain这样的东西吗?

5 个答案:

答案 0 :(得分:2)

检查您是否已有列表,如果没有,则创建一个列表:

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,但您可以使用collections.Iterable来获得更通用的解决方案。

进一步说明,我不知道F / f来自哪里,但理想情况下,它最初是以这种方式创建的,而不是现在修复它。

答案 1 :(得分:2)

您可以尝试a = a if isinstance(a, collections.Iterable) else [a]。这可以确保a可迭代或将其转换为列表。您也无需转换a,您可以将结果分配给另一个变量。

答案 2 :(得分:0)

您可以设计对象,使其具有内置__len__方法以及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

L = [CertainObject(), CertainObject(),CertainObject()]
F = [1,2,3]

for f, o in zip(L,F):
   pass

案例1(多个对象):

A = CertainObject()
F = 1
for a, b in zip(A, [F]*len(A)):
    print(a, b)

案例1(单个对象):

__iter__

使用import java.sql.ResultSet; import java.sql.SQLException; import java.util.List; import org.springframework.jdbc.core.BeanPropertyRowMapper; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.jdbc.core.RowMapper; ,迭代对象实例不会引发错误。

答案 3 :(得分:0)

您可以使用返回嵌套列表的大小写,然后将列表转换为numpy数组并使用flatten()函数,然后如果您希望这样重新转换为列表。

a = list(np.array(a).flatten())

这样,a = 1将变为[1],a = [1,2]将变为[1,2],a = [[1,2]]将变为[1,2] ,所以所有输出都是列表。

答案 4 :(得分:0)

使用扩展

L = []
F = []

L.extend([A])
F.extend([B])

for f,o in zip(L,F):
    # do stuff

这不应该给你带来一个项目列表和多个项目列表的问题(它不会被嵌套)。

示例1项目:

L = []
F = []
A = 1
B = 1
L.extend([A])
F.extend([B])
for f,o in zip(L,F):
    print(f,o)
  

otput

1 1

示例更多项目

L = []
F = []
A = [1,2,3]
B = [1,2,3]
L.extend([A])
F.extend([B])
for f,o in zip(L,F):
    print(f,o)
  

输出

1 1
2 2
3 3
相关问题