我正在处理一个很长的列表,它代表扁平的元组。例如:
vll = ['1', '.32', '2', '3.234', '3', '.23', '4', '8.987', ... for a long time]
我希望能够重组元组,并将其切成适当的长度。理想情况下,我想在将列表重新组合成元组之前对其进行切片。如何确定放在自定义方法上的切片值。
def tuple_list(vll, tuple_length=2):
start, stop, step = sliced # those slice values I don't know how to find
l = vll[start:stop * tuple_length]
tuple_list = zip([int(i) for i in l[0::2]], [float(v) for v in l[1::2]])
return tuple_list[::step]
所以当我使用这个函数时,我希望它看起来像一个传统的 python 列表:
>>> tuple_list(vll)[:2]
>>> [(1, .32), (2, 3.234)]
我知道我可以在函数调用中为切片值创建参数。我也可以这样做:
>>> l = vll[:4]
>>> tuple_list = zip([int(i) for i in l[0::2]], [float(v) for v in l[1::2]])
>>> tuple_list
>>> [(1, .32), (2, 3.234)]
或者
>>> tuple_list = zip([int(i) for i in vll[0::2]], [float(v) for v in vll[1::2]])
>>> tuple_list[:2]
>>> [(1, .32), (2, 3.234)]
更新:下面的代码回答了我的问题。我所做的是定义一个类,而不是一个函数,我可以将所有函数逻辑放在类的__getitem__
方法中。对这种方法的任何想法或意见都会很棒。
class tuple_list(object):
def __init__(self, flat_list, tuple_length=2):
self.flat_list = flat_list
self.tuple_length = tuple_length
def __getitem__(self, item):
base_list = self.flat_list[item.start: item.stop * self.tuple_length]
tuple_list = zip(
[int(i) for i in base_list[0::2]],
[float(v) for v in base_list[1::2]]
)
return tuple_list[::item.step]
>>> tuple_list(range(1000000))[3:48:9]
>>> [(3, 4.0), (21, 22.0), (39, 40.0), (57, 58.0), (75, 76.0), (93, 94.0)]