这个for循环应该迭代我的输入中的'lines',因为它保存了我想要放在字典中作为键的用户名,并在该键中包含一个字典。我的输出包括我需要的信息,但也包括我不想要的奇数行。 我是python的新手,所以我还在努力理解语法。 这是我的代码:
def get_name(string_input):
split_fullstop = string_input.split('.')
list = [] #creates a list
for line in split_fullstop:
count = 0
if count % 2 == 0: #if count is even
list.append(line.split('is connected to')) #add info to 'list'
count += 1 #increase count
names = {name[0]:{} for name in list}
return names
这是打印功能后的输出:
{'': {}, 'Levi ': {}, 'Bryant ': {}, 'Jennie likes to play Super Mushroom Man, Dinosaur Diner, Call of Arms': {}, 'Olive likes to play The Legend of Corgi, Starfleet Commander': {}, 'Debra likes to play Seven Schemers, Pirates in Java Island, Dwarves and Swords': {}, 'Levi likes to play The Legend of Corgi, Seven Schemers, City Comptroller: The Fiscal Dilemma': {}, 'Walter ': {}, 'Robin ': {}, 'John ': {}, 'Walter likes to play Seahorse Adventures, Ninja Hamsters, Super Mushroom Man': {}, 'Debra ': {}, 'Freda likes to play Starfleet Commander, Ninja Hamsters, Seahorse Adventures': {}, 'Mercedes likes to play The Legend of Corgi, Pirates in Java Island, Seahorse Adventures': {}, 'Ollie ': {}, 'Robin likes to play Call of Arms, Dwarves and Swords': {}, 'Bryant likes to play City Comptroller: The Fiscal Dilemma, Super Mushroom Man': {}, 'Freda ': {}, 'Olive ': {}, 'Mercedes ': {}, 'John likes to play The Movie: The Game, The Legend of Corgi, Dinosaur Diner': {}, 'Jennie ': {}, 'Ollie likes to play Call of Arms, Dwarves and Swords, The Movie: The Game': {}}
答案 0 :(得分:3)
请记住,在for循环下面的同一缩进级别的所有代码都将在每次迭代时运行。因此,您要在for循环经历的每个项目中重新定义变量count
和names
。正如其中一条评论中所述,names
应与return
语句处于同一缩进级别。
在每次迭代时重新定义count
意味着您将始终找到0 % 2 == 0
。它应该在for循环之前定义。此外,只有在运行count
部分时才会增加#if count is even
。因此,假设在循环之前定义count
,您会看到0
为偶数,递增count
并永远保留奇数值1
。
使用enumerate
同时查看索引和值的循环。这样你只需要检查索引的偶数/奇数值。
答案 1 :(得分:0)
也许你的计数是一个错误缩进,count是设计来过滤偶数行。
for line in split_fullstop:
count = 0
if count % 2 == 0: #if count is even
list.append(line.split('is connected to')) #add info to 'list'
count += 1 #increase count
答案 2 :(得分:0)
因此,您使用了“for each循环”,它循环遍历可迭代和内置功能中的每个元素,仅评估偶数索引。而不是这个,我认为使用函数范围更清晰,更干净。
range(0, len(split_fullstop), 2)
仅评估偶数
答案 3 :(得分:0)
注意:请勿在{{1}}之类的变量中使用内置的'因为您将覆盖它们,并且可能导致将来出现意外行为。例如,使用list
。
您的l
行将在每一步执行,因为它与names = {name[0]:{} for name in list}
语句不在同一位置。对于if
您要添加到count % 2 == 1
空列表中的步骤。但是在您的解决方案中,您在每个步骤中重新定义dict
,因此您将永远不会像@Isaac Drachman所提到的那样。因此,只需删除一些空格或制表符,然后在count
循环前定义count
:
for
或者您可以使用def get_name(string_input):
split_fullstop = string_input.split('.')
l = [] #creates a list
count = 0
for line in split_fullstop:
if count % 2 == 0: #if count is even
l.append(line.split('is connected to')) #add info to 'list'
count += 1 #increase count
names = {name[0]:{} for name in l}
return names
和list comprehension
重写它:
enumerate
答案 4 :(得分:0)
我只关注你的count
变量,因为这是第一件告诉我错误的事情:
for line in split_fullstop:
count = 0
if count % 2 == 0: #if count is even
# some code
count += 1 #increase count
#some code
return names
首先,您在循环中使用count
重置每个循环上的count = 0
变量,因此每个循环count%2
将等于0
。该行应该在循环之前(之前)。
其次,如果在条件count%2 == 0
中,如果在一次迭代中count == 0
,则增加变量,然后它将进入if-part,并将值增加到{{1 }}。
在下一个(和所有其他)迭代中,从count == 1
开始,if部分的内部将不会被执行,因此count == 1
变量不会改变。
所以,应该是这样的:
count