我正在处理一个很长的列表,它代表扁平化的元组。 E.g:
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)]
答案 0 :(得分:0)
all_points = range(100)
slice_size = 3
sliced_points = zip(* [iter(all_points)]*slice_size)
这是我最喜欢的方式...... 假设我理解正确的问题 ......
然而,如果剩下的点数为奇数,它会截断列表(例如,只剩下2个点需要3个片段)
如果你想要这个结束位,你可以很容易地做到
sliced_points.append(all_points[-(len(all_points)%slice_size):])
如果你只想查看一个范围,只需传递my_list = all_points[start:stop]
而不是你正在进行分组的所有点