Python:虽然,如果,还在计算

时间:2017-10-24 16:08:13

标签: python while-loop

我对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值位于中间位置,则保持列表的排序。

我不知道我哪里出错了,他们两个都不远。对不起,如果这很简单,我还在学习。我已经浏览了这个论坛以寻找类似的查询,有些人已经帮了解,但我仍然能够解决这个问题。

7 个答案:

答案 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)

您的代码中存在一些语义错误。

  1. "中的第一个例子"声明你已经"否则" ! "其他"如果"如果"声明,在这个迭代中你不需要它。

  2. 第二个代码部分。您希望每次执行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)

如果有帮助,请给我竖起大拇指。