Python 列表串联逻辑
Python list concatenation logic
我试图连接两个列表,它们是 'Names' 和 'Ages'。
但是我想通过每次将 [i+1] 的索引附加到另一个列表来做到这一点。
因此,我的目标不是 ['John'、'17'、'Mike'、'21'],而是每个对都有不同的索引,并且是一个列表 element.Like --> [ ['John', '17'], ['Mike', '21']]
(注意:我知道我可以用 zip() 函数做到这一点,这是为了练习)
所以我得到了那个代码 -->
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])
b.append([] + a)
a.clear()
print(b)
输出 --> [['Ana', '17'], ['John', '22'], ['Bob', '33'], ['Mike', '8'], ['July', '76']]
正如你所看到的,我设法做到了,但奇怪的是 b.append([] + a) 行。当我输入 b.append(a) 它 returns 空 b 列表时,我意外地得到了我想要的东西。
但是按照附加代码中的路径,我正在完成我想要做的事情。谁能解释为什么这是有效的?我抓不到。
提前致谢。
如果两个列表的元素数量相同,那么您可以使用 zip() 函数。
注意:zip() 函数只会迭代直到最小列表通过。
list1=[]
for x,y in zip(names,ages):
list1.append([x,y])
print(list1)
在代码中添加打印显示 b 在循环后得到 'cleared',并且它没有在循环内存储正确的信息。它本质上是相同 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)
['Ana', '17']
[['Ana', '17']]
['John', '22']
[['John', '22'], ['John', '22']]
['Bob', '33']
[['Bob', '33'], ['Bob', '33'], ['Bob', '33']]
['Mike', '8']
[['Mike', '8'], ['Mike', '8'], ['Mike', '8'], ['Mike', '8']]
['July', '76']
[['July', '76'], ['July', '76'], ['July', '76'], ['July', '76'], ['July', '76']]
[[], [], [], [], []]
这是因为列表在 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)
[['some data']]
[[]]
这就是 a+[]
起作用的原因:
a = ['some data']
b = [a+[]]
print(b)
a.clear()
print(b)
[['some data']]
[['some data']]
以下是我使用列表理解的解决方案。
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']
a = []
b = []
for i in range(len(names)):
a.append(names[i])
a.append(ages[i])
b.append([]+a)
a.clear()
print(b)
根据你的代码b.append([]+a)
每次都与 array.if 连接,你用这样的打印语句检查
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.append([]+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
和 list
将其写在一行代码中:
result = list(zip(names, ages))
我试图连接两个列表,它们是 'Names' 和 'Ages'。 但是我想通过每次将 [i+1] 的索引附加到另一个列表来做到这一点。 因此,我的目标不是 ['John'、'17'、'Mike'、'21'],而是每个对都有不同的索引,并且是一个列表 element.Like --> [ ['John', '17'], ['Mike', '21']]
(注意:我知道我可以用 zip() 函数做到这一点,这是为了练习)
所以我得到了那个代码 -->
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])
b.append([] + a)
a.clear()
print(b)
输出 --> [['Ana', '17'], ['John', '22'], ['Bob', '33'], ['Mike', '8'], ['July', '76']]
正如你所看到的,我设法做到了,但奇怪的是 b.append([] + a) 行。当我输入 b.append(a) 它 returns 空 b 列表时,我意外地得到了我想要的东西。 但是按照附加代码中的路径,我正在完成我想要做的事情。谁能解释为什么这是有效的?我抓不到。
提前致谢。
如果两个列表的元素数量相同,那么您可以使用 zip() 函数。
注意:zip() 函数只会迭代直到最小列表通过。
list1=[]
for x,y in zip(names,ages):
list1.append([x,y])
print(list1)
在代码中添加打印显示 b 在循环后得到 'cleared',并且它没有在循环内存储正确的信息。它本质上是相同 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)
['Ana', '17']
[['Ana', '17']]
['John', '22']
[['John', '22'], ['John', '22']]
['Bob', '33']
[['Bob', '33'], ['Bob', '33'], ['Bob', '33']]
['Mike', '8']
[['Mike', '8'], ['Mike', '8'], ['Mike', '8'], ['Mike', '8']]
['July', '76']
[['July', '76'], ['July', '76'], ['July', '76'], ['July', '76'], ['July', '76']]
[[], [], [], [], []]
这是因为列表在 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)
[['some data']]
[[]]
这就是 a+[]
起作用的原因:
a = ['some data']
b = [a+[]]
print(b)
a.clear()
print(b)
[['some data']]
[['some data']]
以下是我使用列表理解的解决方案。
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']
a = []
b = []
for i in range(len(names)):
a.append(names[i])
a.append(ages[i])
b.append([]+a)
a.clear()
print(b)
根据你的代码b.append([]+a)
每次都与 array.if 连接,你用这样的打印语句检查
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.append([]+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
和 list
将其写在一行代码中:
result = list(zip(names, ages))