创建我自己的“问题”;zip";Python中的函数

创建我自己的“问题”;zip";Python中的函数,python,list,iteration,Python,List,Iteration,作为个人练习,我尝试创建自己的小zip()函数,该函数包含两个列表,并将项目放入元组列表中。换句话说,如果这些是我的列表: fr = [6,5,4] tr = [7,8,9] 我希望: [(6,7), (5,8), (4,9)] 这是我的密码: def zippy(x, y): zipper = [] for i in x : for g in y: t = (i,g) zipper.append(t) 我得到的是:[

作为个人练习,我尝试创建自己的小zip()函数,该函数包含两个列表,并将项目放入元组列表中。换句话说,如果这些是我的列表:

fr = [6,5,4]
tr = [7,8,9]
我希望:

[(6,7), (5,8), (4,9)]
这是我的密码:

def zippy(x, y):
    zipper = []
    for i in x :
        for g in y:
            t = (i,g)
        zipper.append(t)
我得到的是:
[(6,9)、(5,9)、(4,9)]
,,
但当我在函数内部定义列表时,它会按预期工作。感谢您的帮助

使用索引访问相同的索引项:

def zippy(x, y):
    zipper = []
    for i in range(len(x)):
        zipper.append((x[i], y[i]))
    return zipper
使用:



我建议使用
range()
循环遍历数组的每个索引。然后,将它们放入一个元组中,并将它们附加到数组中

def zippy(x, y):
    zipper = []
    for i in range(len(x)) :
        zipper.append((x[i],y[i]))
    return zipper

有关
range()
的详细信息,请转到。

您需要同时迭代两个数组,以从两个数组中获得相同的索引

 def zippy(x, y):
        zipper = []
        for i,g in zip(x,y):
            t = (i,g)
            zipper.append(t)
        print(zipper)
输出

[(6, 7), (5, 8), (4, 9)]

请考虑,如果你有两个不同长度的列表,当最短的序列结束时,你的拉链应该停止。下面是一个如何执行此操作的示例:

def zippy(x, y):
    iter1 = iter(x)
    iter2 = iter(y)
    while True:
        try:
            yield next(iter1), next(iter2)
        except StopIteration:
            return

还请注意,标准zip函数返回(生成器)而不是数据列表!这意味着,如果您需要从结果中获取数据,则必须将zip结果转换为列表:

result = zippy(fr, tr)
print(list(result))
或者调用迭代器

next(result)

在附加之前,您将
t
赋值三次,这意味着元组列表中的第一个条目将是
y
中的最后一个值。谢谢!如果函数中包含列表,您知道为什么它会起作用吗?这让我抓狂。我无法重现你的经历,你能把你使用的代码贴出来吗?我在函数内部定义了列表,而不是在函数外部定义了列表,但它仍然返回错误的结果。奇怪的是,你是对的。嗯,在Eclipse中,我不能退得太远去发现我在做什么!再次感谢。我每天都会好一点。这很好,但是你知道如果列表是在函数中定义的,为什么m原始代码会起作用吗?@SeaWolf,它不起作用的原因:
zipper.append(t)
是在内部循环之后调用的
t[1]
将始终引用
y
的最后一项。我认为即使列表是在函数中定义的,它也不起作用。你能提供有效的代码吗(它定义函数中的列表)?我不能,我在Eclipse中用光了“undues”来找出是什么小小的调整产生了它。谢谢你详尽的回答。
def zippy(x, y):
    iter1 = iter(x)
    iter2 = iter(y)
    for _ in range(min(len(x), len(y))):
        yield next(iter1), next(iter2)
result = zippy(fr, tr)
print(list(result))
next(result)
# A zip() is a kind of map()!
def zippy(a, b):
  return map(lambda (i, a): (a, b[i]), enumerate(a))