Python列表连接逻辑

Python列表连接逻辑,python,list,for-loop,logic,concatenation,Python,List,For Loop,Logic,Concatenation,我试图将两个列表连接起来,分别是“姓名”和“年龄”。 但我想这样做,每次将他们的索引[I+1]附加到另一个列表中。 因此,我的目标不是['John',17','Mike',21',],而是每对都有不同的索引,并且是一个列表元素 (注意:我知道我可以用zip()函数实现,这是为了练习) 所以我最终得到了那个密码--> 输出-->['Ana','17',['John','22',['Bob','33',['Mike','8',['July','76']] 正如你所见,我成功地做到了这一点,但奇怪的是

我试图将两个列表连接起来,分别是“姓名”和“年龄”。 但我想这样做,每次将他们的索引[I+1]附加到另一个列表中。 因此,我的目标不是['John',17','Mike',21',],而是每对都有不同的索引,并且是一个列表元素

(注意:我知道我可以用zip()函数实现,这是为了练习)

所以我最终得到了那个密码-->

输出-->['Ana','17',['John','22',['Bob','33',['Mike','8',['July','76']]

正如你所见,我成功地做到了这一点,但奇怪的是,行b.append([]+a)。我意外地得到了我想要的,当我键入b.append(a)时,它返回空的b列表。 但是,通过遵循所附代码中的路径,我正在完成我试图做的事情。有人能解释为什么这样做有效吗?我没能抓住它


提前感谢。

如果两个列表的元素数相同,则可以使用zip()函数

注意:zip()函数只会迭代到传递最小的列表

list1=[]
for x,y in zip(names,ages):
    list1.append([x,y])
print(list1)

如果两个列表的元素数相同,则可以使用zip()函数

注意:zip()函数只会迭代到传递最小的列表

list1=[]
for x,y in zip(names,ages):
    list1.append([x,y])
print(list1)

在代码中添加打印显示b在循环后被“清除”,并且它没有在循环中存储正确的信息。它本质上是相同
a
的副本:

names = ['Ana', 'John', 'Bob', 'Mike', 'July']
ages = ['17', '22', '33', '8', '76']
a = []
b = []
for i in range(len(names)):
    a.append(names[i])
    a.append(ages[i])
    print(a)
    b.append(a)
    print(b)
    a.clear()
print(b)
这是因为列表在python中是可变的。清除它时,b所指向的数据也将被删除。当您执行
[]+a
时,您正在创建一个新列表,该列表不再是
a
的引用。通过这种方式更改代码,您可以得到您想要的:

names = ['Ana', 'John', 'Bob', 'Mike', 'July']
ages = ['17', '22', '33', '8', '76']
b = []
for i in range(len(names)):
    a = []
    a.append(names[i])
    a.append(ages[i])
    b.append(a)
print(b)
为了帮助您理解我所说的可变的含义,请参见以下示例:

a = ['some data']
b = [a]
print(b)
a.clear()
print(b)
这就是
a+[]
工作的原因:

a = ['some data']
b = [a+[]]
print(b)
a.clear()
print(b)

在代码中添加打印显示b在循环后被“清除”,并且它没有在循环中存储正确的信息。它本质上是相同
a
的副本:

names = ['Ana', 'John', 'Bob', 'Mike', 'July']
ages = ['17', '22', '33', '8', '76']
a = []
b = []
for i in range(len(names)):
    a.append(names[i])
    a.append(ages[i])
    print(a)
    b.append(a)
    print(b)
    a.clear()
print(b)
这是因为列表在python中是可变的。清除它时,b所指向的数据也将被删除。当您执行
[]+a
时,您正在创建一个新列表,该列表不再是
a
的引用。通过这种方式更改代码,您可以得到您想要的:

names = ['Ana', 'John', 'Bob', 'Mike', 'July']
ages = ['17', '22', '33', '8', '76']
b = []
for i in range(len(names)):
    a = []
    a.append(names[i])
    a.append(ages[i])
    b.append(a)
print(b)
为了帮助您理解我所说的可变的含义,请参见以下示例:

a = ['some data']
b = [a]
print(b)
a.clear()
print(b)
这就是
a+[]
工作的原因:

a = ['some data']
b = [a+[]]
print(b)
a.clear()
print(b)

下面是我使用列表理解的解决方案

names = ['Ana', 'John', 'Bob', 'Mike', 'July']
ages = ['17', '22', '33', '8', '76']

new_list = [ [names[i], ages[i]] for i in range(len(names))]
    
print(new_list)

下面是我使用列表理解的解决方案

names = ['Ana', 'John', 'Bob', 'Mike', 'July']
ages = ['17', '22', '33', '8', '76']

new_list = [ [names[i], ages[i]] for i in range(len(names))]
    
print(new_list)
根据您的代码
b.append([]+a)
每次都使用数组进行连接。如果您使用这样的print语句进行检查

for i in range(len(names)):
    a.append(names[i])
    a.append(ages[i])
    print("=>",a)
然后向您展示输出是什么

=> ['Ana', '17']
=> ['John', '22']
=> ['Bob', '33']
=> ['Mike', '8']
=> ['July', '76']
因此,当您添加
b.append([]+a)
我们现在理解得更清楚了 b=[] 当我们尝试 b、 追加([]+a) 这意味着上面的数组将多个数组连接成一个数组

我认为当你使用时,你很容易解决你的问题
zip()
用于迭代

myList=[]
for a,b in zip(names,ages):
    list.append([a,b])


print(myList)
输出:

[['Ana', '17'], ['John', '22'], ['Bob', '33'], ['Mike', '8'], ['July', '76']]
根据您的代码
b.append([]+a)
每次都使用数组进行连接。如果您使用这样的print语句进行检查

for i in range(len(names)):
    a.append(names[i])
    a.append(ages[i])
    print("=>",a)
然后向您展示输出是什么

=> ['Ana', '17']
=> ['John', '22']
=> ['Bob', '33']
=> ['Mike', '8']
=> ['July', '76']
因此,当您添加
b.append([]+a)
我们现在理解得更清楚了 b=[] 当我们尝试 b、 追加([]+a) 这意味着上面的数组将多个数组连接成一个数组

我认为当你使用时,你很容易解决你的问题
zip()
用于迭代

myList=[]
for a,b in zip(names,ages):
    list.append([a,b])


print(myList)
输出:

[['Ana', '17'], ['John', '22'], ['Bob', '33'], ['Mike', '8'], ['July', '76']]

我会在列表中使用zip:

names = ['Ana', 'John', 'Bob', 'Mike', 'July']
ages = ['17', '22', '33', '8', '76']

b = [[name,age] for name, age in zip(names,ages)]

我会在列表中使用zip:

names = ['Ana', 'John', 'Bob', 'Mike', 'July']
ages = ['17', '22', '33', '8', '76']

b = [[name,age] for name, age in zip(names,ages)]

您可以使用
zip
list
将其写入一行代码中:

result = list(zip(names, ages))

您可以使用
zip
list
将其写入一行代码中:

result = list(zip(names, ages))

很好的方法很好的方法很好的解释,谢谢