“float”对象在列表中不可iterable

2024-03-29 09:16:30 发布

您现在位置:Python中文网/ 问答频道 /正文

我有两个熊猫系列plgtrd,我把它们变成了列表并包含整数。 当plg为负时,我想为plgtrd创建一个校正计算,但是我不确定如何用列表理解来处理这个问题。你知道吗

我试过:

    plg = [ 1.3962634 ,  1.57079633, -0.52359878,  0.61086524,  0.83775804,
    0.17453293,  1.36135682,  1.43116999,  1.57079633,  1.57079633]
    trd = [2.0943951 , 2.86233997, 9.8087504 , 4.71238898, 5.41052068,
   1.13446401, 2.18166156, 2.12930169, 2.77507351, 2.91469985]

    Zero = def ZeroTwoPi(a):
    """
    Zero constrains azimuth to lie between 0 and 2*pi RADIANS.

    Returns azimuth b (from 0 to 2*pi) for input azimuth a.

    NOTE: Azimuths a and b are input/output in radians.
    """
    b = a;
    twopi = 2.0*np.pi
    x = [b + twopi if b < 0 else b - twopi if b>= twopi else b for b in a]
    return x

    plg_up = [-i if i < 0.0 else i for i in plg ]
    trd_up = [Zero(i - np.pi) if plg[index] < 0 else i for index,i in enumerate(trd)]

plg返回正确,3元素返回正数,但“trd\u up”似乎不能遍历Zero()函数,因为它是一个列表。我是否只需要为Zero()创建的列表添加另一个enumerate()索引?你知道吗

我可以通过在列表中包含Zero()的参数来解决这个问题:

trd_up = [Zero([i - np.pi]) if plg[index] < 0 else i for index,i in enumerate(trd)]

但这会返回一个列表中的列表:

[2.0943951023931953,
 2.8623399732707,
 [0.3839724354387517],
 4.71238898038469,
 5.410520681182422,
 1.1344640137963142,
 2.1816615649929116,
 2.129301687433082,
 2.775073510670984,
 2.9146998508305306]

Tags: in列表forindexifnppielse
3条回答

可以使用^{}plg_uptrd_up生成元素元组:

[(i,b) for (i,b) in zip(plg_up, trd_up)]
[(1.3962634, 2.0943951), (1.57079633, 2.86233997), (0.52359878, 6.658750399999999), (0.61086524, 4.71238898), (0.83775804, 5.41052068), (0.17453293, 1.13446401), (1.36135682, 2.18166156), (1.43116999, 2.12930169), (1.57079633, 2.77507351), (1.57079633, 2.91469985)]

这允许您按预期比较btrd_up的相应值:

[i - np.pi if b < 0 else i for (i,b) in zip(plg_up, trd_up)]
[1.3962634, 1.57079633, 0.52359878, 0.61086524, 0.83775804, 0.17453293, 1.36135682, 1.43116999, 1.57079633, 1.57079633]

正如在其他答案中所建议的,您可以使用enumerateplg访问具有相同索引的元素。另外,对于第一个列表,可以使用abs内置函数。你知道吗

plg_up = [abs(x) for x in plg]
trd_up = [x - np.pi if plg[i] < 0 else x for i, x in enumerate(trd)]

您需要同时检查两个列表中的coresponding元素,您可以使用enumerate返回另一个列表中相同位置的元素。
trd_up = [i - np.pi if plg[index]<0 else i for index,i in enumerate(trd)]

相关问题 更多 >