我对while / if语句有点问题。
我有一个值列表,通常这些值将是字符串,但有时它可以返回None。以下是我的两次尝试:
x = ['One','Two','Three',None,None]
New = []
count=0
for y in x:
while isinstance(y,str):
New.append(y)
count+=1
break
else:
count+=1
New.append('New - '+str(count))
print New,count
>>> The list repeats several times
New = []
for y in x:
count=0
if y is not None:
New.append(y)
count+=1
else:
count+=1
New.append('New - '+str(count))
>>>['One','Two','Three','New - 1','New - 1']
我希望输出为: [' One'' Two'' Three',' New - 4',' New - 5']如果None值位于中间位置,则保持列表的排序。
我不知道我哪里出错了,他们两个都不远。对不起,如果这很简单,我还在学习。我已经浏览了这个论坛以寻找类似的查询,有些人已经帮了解,但我仍然能够解决这个问题。
答案 0 :(得分:1)
第17行
您在循环内声明了 count 变量 这意味着,每次迭代都是如此 将变量设置为零
答案 1 :(得分:1)
每当计算索引并循环遍历列表时,最好使用enumerate
。如果您不希望从0
开始默认,也可以指定开始编号。这似乎就是这种情况,因为您似乎想要从1
同样,while
循环似乎毫无意义。一个简单的if
就足够了。如果您知道这些项目为None
,那么最好检查一下None
是否{而不是检查isinstance(item, str)
所以我相信你正在寻找的解决方案就像
x = ['One', 'Two', 'Three', None, None]
new = []
for index, item in enumerate(x, start=1):
if item is None:
new.append('New - {}'.format(index))
else:
new.append(item)
print(new)
这应该产生预期的结果。如果你愿意的话,这也可以写成列表理解。
new = [item if item is not None else 'New - {}'.format(index) for index, item in enumerate(x, start=1)]
输出
['One', 'Two', 'Three', 'New - 4', 'New - 5']
答案 2 :(得分:1)
第一个代码:
x = ['One','Two','Three',None,None]
New = []
count=0
for y in x:
while isinstance(y,str):
New.append(y)
count+=1
break
else:
count+=1
New.append('New - '+str(count))
print (New,count)
第二代码:
x = ['One','Two','Three',None,None]
New = []
count=0
for y in x:
if y is not None:
New.append(y)
count+=1
else:
count+=1
New.append('New - '+str(count))
print (New,count)
在第二段代码中,在for循环之外初始化count = 0。
在第一个代码中,您也可以替换'而在'与'如果':
.
.
.
if isinstance(y,str):
New.append(y)
count+=1
else:
.
.
.
答案 3 :(得分:1)
您也可以尝试这个简单的解决方案
x = ['One','Two','Three',None,None]
for i in range(0,len(x)):
if x[i]==None:
x[i]='New -'+ str(i+1)
print x
答案 4 :(得分:1)
您的代码中存在一些语义错误。
"中的第一个例子"声明你已经"否则" ! "其他"如果"如果"声明,在这个迭代中你不需要它。
第二个代码部分。您希望每次执行for语句时增加计数值,但每次时将值设置为0。因此,在每次执行for循环后,它将再次设置为1-> 0-> 1-> 0 ... 因此,在开始for循环之前删除该行并将其放入。
x = ['One','Two','Three',None,None]
New = []
count=0
for y in x:
if y is not None:
New.append(y)
count+=1
else:
count+=1
New.append('New - '+str(count))
答案 5 :(得分:0)
while循环+无条件休息很奇怪。对于if和no break,它将以相同的方式工作。
答案 6 :(得分:0)
解决这个问题的另一种方法是使用名为sorted的内置Python函数:这是我的例子希望它有所帮助
# Support problem on Stackflow answered by Waheed Rafi { Wazzie }
import sys
listOfNames = ['John','Waheed','Foo','Boo']
# print in unorder list
for element in listOfNames:
print(element)
print("--------------------------------------")
print("The new sorted list in Alphabetically")
print("--------------------------------------")
sortedlist = sorted(listOfNames) # python has built-in function call sorted
# print List in order ie alphabetically
for sortedElement in sortedlist:
print(sortedElement)
如果有帮助,请给我竖起大拇指。