如何添加列表的第一个和最后一个元素并弹出它们,并在循环中对整个列表执行此操作



我正在尝试制作一个爱情计算器。为此,我取了两个名字并加上";爱;在这些名字之间。把整个字符串分成几个字符。以列表中某个字符重复的次数作为值创建一个目录。

现在,我需要添加值列表中的第一个和最后一个元素,并将总和附加到other_list中。循环进行,直到list_of_numbers中只有两个数字。我在循环部分有问题。能请人帮帮我吗。谢谢

name1 = input("Hey please enter first name heren")
name2 = input("Hey please enter second name heren")
love = "loves"
final_string = name1 + love + name2
list_of_name = list(final_string)
numbers = {}
for lets in list_of_name:
if lets not in numbers:
numbers[lets] = 1
else:
numbers[lets] += 1
list_of_numbers = list(numbers.values())
other_list = []
i = len(list_of_numbers)
print(list_of_numbers)
"""this is where i am having problem"""
if len(list_of_numbers) != 2;
for x in range(0, i, 2):
a = int(list_of_numbers[0]) + int(list_of_numbers[-1])
other_list.append(a)
list_of_numbers.pop()
list_of_numbers.pop(0)
print(list_of_numbers)
print(other_list)
list_of_numbers += other_list
print(list_of_numbers)

我不确定您的代码应该输出什么,但您应该检查for循环中的长度。

for x in range(0, i, 2):
if len(list_of_numbers) < 2: # check here
break
a = int(list_of_numbers[0]) + int(list_of_numbers[-1])
other_list.append(a)
list_of_numbers.pop()
list_of_numbers.pop(0)
print(list_of_numbers)
print(other_list)
list_of_numbers += other_list
print(list_of_numbers)

运行此操作成功。

name1 = input("Hey please enter first name heren")
name2 = input("Hey please enter second name heren")
love = "loves"
final_string = name1 + love + name2
list_of_name = list(final_string)
numbers = {}
for lets in list_of_name:
if lets not in numbers:
numbers[lets] = 1
else:
numbers[lets] += 1
list_of_numbers = list(numbers.values())
other_list = []
i = len(list_of_numbers)
print(list_of_numbers)
"""this is where i am having problem"""
for x in range(0, i, 2):
if len(list_of_numbers) < 2:
break
a = int(list_of_numbers[0]) + int(list_of_numbers[-1])
other_list.append(a)
list_of_numbers.pop()
list_of_numbers.pop(0)
print(list_of_numbers)
print(other_list)
list_of_numbers += other_list
print(list_of_numbers)

没有任何错误的完整代码。

你能澄清一下为什么跳过两个步骤for x in range(0,i,2)吗?否则,我认为如果你只想要列表的第一个元素和最后一个元素,直到列表剩下2个元素,就不需要跳过2个元素了,你可以使用while循环。

while(len(list_of_numbers) > 2):
a = int(list_of_numbers[0]) + int(list_of_numbers[-1])
other_list.append(a)
list_of_numbers.pop()
list_of_numbers.pop(0)
print(list_of_numbers)
print(other_list)
list_of_numbers += other_list
print(list_of_numbers)

我已经根据这个问题更新了你的代码。在这里,我使用了OrderedDict()作为正确的和,并更改了循环内部的逻辑,以正确地捕捉场景,例如当列表中有一个以上的元素时,以及当列表中只剩下一个元素时。

from collections import OrderedDict
name1 = input("Hey please enter first name heren")
name2 = input("Hey please enter second name heren")
love = "loves"
final_string = name1 + love + name2
list_of_name = list(final_string)
numbers = OrderedDict()
for lets in list_of_name:
if lets not in numbers:
numbers[lets] = 1
else:
numbers[lets] += 1
list_of_numbers = list(numbers.values())
print(list_of_numbers)
other_list = []
i = len(list_of_numbers)
print(list_of_numbers)
"""this is where i am having problem"""
while(list_of_numbers):
if(len(list_of_numbers) == 1):
other_list.append(list_of_numbers.pop())
else:
a = int(list_of_numbers[0]) + int(list_of_numbers[-1])
other_list.append(a)
list_of_numbers.pop()
list_of_numbers.pop(0)

if(len(list_of_numbers) == 0):
#print(len(list_of_numbers))
list_of_numbers += other_list
other_list.clear()
if (len(list_of_numbers)==2):
print(list_of_numbers)
break

print("%2d%2d" % (list_of_numbers[0],list_of_numbers[1]))  

最新更新