二维数组的普通冒泡排序 python 问题
longhand bubble sort of 2d array python problem
我有一个从文本文件中取出的数组,数组中是:
[('Sammy', 'sammy@gmail.com', '72'), ('John', 'john@gmail.com', '33'), ('Felix', 'felix@gmail.com', '89'), ('Henry', 'henry@gmail.com', '23'), ('Steven', 'steven@gmail.com', '83'), ('Harry', 'harry@gmail.com', '46'), ('Billy', 'billy@gmail.com', '62'), ('Alex', 'alex@gmail.com', '66'), ('Finn', 'finn@gmail.com', '49')]
在这个二维数组中,我想对数据进行排序,得分最高的数据排在列表顶部,得分最低的数据排在列表底部。该列表名为 sorted_database,低于
我的冒泡排序代码如下(我也想在不使用任何函数的情况下长期使用,例如 .sort):
swapped_database = []
def sortdata():
swapped = True
length = len(database)
print(length)
temp = 0
while swapped == True:
swapped = False
for index in range(0,length -1,3):
print(index)
if database[index] > database[index+1]:
temp = database[index]
database[index] = database[index+1]
database[index + 1] = temp
swapped = True
swapped_database.append(database)
print(swapped_database)
sortdata()
提前致谢
使用 swapped
布尔值和 3
的步骤,这种方法看起来过于复杂。您可以简单地使用双 for
循环。
这是一个 returns 排序列表的工作实现。它使用两个 for
循环进行交换,并根据每个元组中第三个元素的整数值来比较值(而不是直接进行元组比较):
def sortdata(database):
for iter_idx in range(len(database)):
for elem_idx in range(len(database) - iter_idx - 1):
if int(database[elem_idx][2]) > int(database[elem_idx + 1][2]):
database[elem_idx], database[elem_idx + 1] = \
database[elem_idx + 1], database[elem_idx]
return database
使用示例数据,调用 print(sortdata(database))
输出:
[[('John', 'john@gmail.com', '33'),
('Sammy', 'sammy@gmail.com', '72'),
('Felix', 'felix@gmail.com', '89'),
('Henry', 'henry@gmail.com', '23'),
('Steven', 'steven@gmail.com', '83'),
('Harry', 'harry@gmail.com', '46'),
('Billy', 'billy@gmail.com', '62'),
('Alex', 'alex@gmail.com', '66'),
('Finn', 'finn@gmail.com', '49')]]
确保将 database
作为参数传递给函数。第二个 for
循环的上限是 iter_idx
作为 Mushroomator 的建议优化。
存在以下问题:
内部循环不应进行 3 步。元组大小与该元组在 database
列表中的索引无关。 database[index]
值是 元组 ,而不是元组的 成员 。
比较要看分数。这意味着您应该明确比较元组的 third 元素, 和 将它们转换为数字——因为它们是字符串。
swapped_database
在这里没有作用。冒泡排序是一种 inplace 排序算法,因此它使 database
本身排序。此外, swapped_database.append(database)
没有什么意义。它使 database
成为 swapped_database
中的一个条目
关于代码的一些其他说明:
避免改变全局变量,因此将 database
作为参数传递给您的函数。
在 Python 中,您不需要 temp
变量来交换值。请改用元组赋值。
while swapped == True
太过分了,因为 swapped
已经是一个布尔值,所以只需 while swapped
def sortdata(database):
swapped = True
length = len(database)
while swapped == True:
swapped = False
for index in range(0,length -1):
if int(database[index][2]) < int(database[index+1][2]):
database[index], database[index+1] = database[index+1], database[index]
swapped = True
使用示例:
sortdata(database)
for entry in database:
print(entry)
我有一个从文本文件中取出的数组,数组中是:
[('Sammy', 'sammy@gmail.com', '72'), ('John', 'john@gmail.com', '33'), ('Felix', 'felix@gmail.com', '89'), ('Henry', 'henry@gmail.com', '23'), ('Steven', 'steven@gmail.com', '83'), ('Harry', 'harry@gmail.com', '46'), ('Billy', 'billy@gmail.com', '62'), ('Alex', 'alex@gmail.com', '66'), ('Finn', 'finn@gmail.com', '49')]
在这个二维数组中,我想对数据进行排序,得分最高的数据排在列表顶部,得分最低的数据排在列表底部。该列表名为 sorted_database,低于
我的冒泡排序代码如下(我也想在不使用任何函数的情况下长期使用,例如 .sort):
swapped_database = []
def sortdata():
swapped = True
length = len(database)
print(length)
temp = 0
while swapped == True:
swapped = False
for index in range(0,length -1,3):
print(index)
if database[index] > database[index+1]:
temp = database[index]
database[index] = database[index+1]
database[index + 1] = temp
swapped = True
swapped_database.append(database)
print(swapped_database)
sortdata()
提前致谢
使用 swapped
布尔值和 3
的步骤,这种方法看起来过于复杂。您可以简单地使用双 for
循环。
这是一个 returns 排序列表的工作实现。它使用两个 for
循环进行交换,并根据每个元组中第三个元素的整数值来比较值(而不是直接进行元组比较):
def sortdata(database):
for iter_idx in range(len(database)):
for elem_idx in range(len(database) - iter_idx - 1):
if int(database[elem_idx][2]) > int(database[elem_idx + 1][2]):
database[elem_idx], database[elem_idx + 1] = \
database[elem_idx + 1], database[elem_idx]
return database
使用示例数据,调用 print(sortdata(database))
输出:
[[('John', 'john@gmail.com', '33'),
('Sammy', 'sammy@gmail.com', '72'),
('Felix', 'felix@gmail.com', '89'),
('Henry', 'henry@gmail.com', '23'),
('Steven', 'steven@gmail.com', '83'),
('Harry', 'harry@gmail.com', '46'),
('Billy', 'billy@gmail.com', '62'),
('Alex', 'alex@gmail.com', '66'),
('Finn', 'finn@gmail.com', '49')]]
确保将 database
作为参数传递给函数。第二个 for
循环的上限是 iter_idx
作为 Mushroomator 的建议优化。
存在以下问题:
内部循环不应进行 3 步。元组大小与该元组在
database
列表中的索引无关。database[index]
值是 元组 ,而不是元组的 成员 。比较要看分数。这意味着您应该明确比较元组的 third 元素, 和 将它们转换为数字——因为它们是字符串。
中的一个条目swapped_database
在这里没有作用。冒泡排序是一种 inplace 排序算法,因此它使database
本身排序。此外,swapped_database.append(database)
没有什么意义。它使database
成为swapped_database
关于代码的一些其他说明:
避免改变全局变量,因此将
database
作为参数传递给您的函数。在 Python 中,您不需要
temp
变量来交换值。请改用元组赋值。while swapped == True
太过分了,因为swapped
已经是一个布尔值,所以只需while swapped
def sortdata(database):
swapped = True
length = len(database)
while swapped == True:
swapped = False
for index in range(0,length -1):
if int(database[index][2]) < int(database[index+1][2]):
database[index], database[index+1] = database[index+1], database[index]
swapped = True
使用示例:
sortdata(database)
for entry in database:
print(entry)