我正在迭代一些数字并创建一串符合我标准的连接数字。但是,我没有得到我想要的输出。我是python的新手,所以我可能会在这里遗漏一些东西。这是我的代码:
my_lst = []
for x in range(10):
my_lst.append(str(x))
counter = 0
weird_num = 0
for y in range(10):
if my_lst[y] < 5:
weird_num = weird_num + my_lst[y]
counter = counter + 1
print weird_num, counter
输出为0 10
,我希望输出为012345 10
。我的想法是,我正在尝试建立这一系列的整数,所以我可能会遇到铸造问题,但我不确定。此外,任何提高我的python代码的技巧都会受到赞赏,因为我是新手!感谢
答案 0 :(得分:2)
您正在使用整数比较字符串:
if my_lst[y] < 5:
在Python 2中,字符串始终在数字后排序:
>>> '1' < 5
False
>>> '9' < 5
False
因此,weird_num
只是初始值,即整数0
。如果您的循环有效,那么您可能会遇到错误,告诉您无法连接整数和字符串
比较字符串,然后将weird_num
作为空字符串启动,如果要包含5
,请测试较低的或等于:
weird_num = ''
if my_lst[y] <= '5':
或更简单,只需连接列表中的前6个值;您的列表按排序顺序包含从'0'
到'9'
的数字:
weird_num = ''.join(my_lst[:6])
答案 1 :(得分:1)
您的问题是,my_lst[y]
是一个字符串,因此无法与int
进行比较。这里有一些代码可以产生你想要的输出。我还提供了一些可以让你的python代码看起来更好的东西!
my_lst = [str(x) for x in range(10)]
weird_num = ""
for counter, y in enumerate(range(10), 1):
if int(my_lst[y]) <= 5:
weird_num = weird_num + my_lst[y]
print weird_num, counter
这将产生您想要的输出。
现在,让我解释一下我所包含的部分内容。在行1
,而不是创建一个空列表,然后用for循环填充它,我使用列表理解来填充列表我做的一分钟。有关list comprehensions的更多信息,请访问here。基本上,它将一个for循环粘贴到填充列表的列表中的一个列表中。
接下来,我将weird_num
列为空列表。这样您就可以开始连接for循环中的my_lst
元素。如果你用weird_num = "0"
初始化它,你的输出左边会有一个额外的零。
对于for循环,我使用了enumerate
,可以找到更多信息here。它将你的for循环变成一个枚举对象,这意味着你可以通过整个事物跟踪counter
之类的变量。 counter
将从0开始 - > 9,但我添加了1
的额外参数,以便它将从1 - &gt; 10。
最后,在for循环中,我只需要将my_lst[y]
强制转换为int
,以便您可以执行比较逻辑。
HTH
答案 2 :(得分:1)
weird_num
应该是一个字符串。将weird_num = 0
替换为weird_num = ""
。此外,您正在将数字与字符串进行比较,这不会产生您想要的结果。
请改为尝试:
my_lst = []
for x in range(10):
my_lst.append(x)
counter = 0
weird_num = ""
for y in range(10):
if my_lst[y] < 5:
weird_num = weird_num + str(my_lst[y])
counter = counter + 1
print weird_num, counter
其他事项:
您可以将counter = counter + 1
替换为counter += 1
。
你可以(而且应该)用这个替换第二个for
循环:
for y in my_lst:
if y < 5:
weird_num = weird_num + str(y)
counter = counter + 1
这会直接在列表上进行迭代。
连接字符串时,最好使用函数str.join
。一个例子:
>>> lst = ["Hello", "world", "!"]
>>> "...".join(lst)
Hello...world...!
您可以使用以下内容替换整个代码:
my_lst = list(range(10))
weird_num = "".join(str(i) for i in my_lst if i < 5)
counter = len(my_list)
答案 3 :(得分:1)
你想要达到什么目的?如果您只想要一个由所有整数组成的字符串(但不包括)某个值,您可以这样做:
weird_num = "".join(str(x) for x in range(value))
更详细地说,这是您的代码正在做的事情:
my_lst = []
for x in range(10):
my_lst.append(str(x))
这将创建十个单位数整数的字符串列表:['0', '1', '2', ..., '9']
。在此列表中,每个项目是其索引的字符串表示形式,即每个值my_lst[x] == str(x)
。这不是一个非常有用的列表,因为如果你需要字符串,你可以调用str(x)
。
counter = 0
...
for y in range(10):
...
counter = counter + 1
在整个循环中,counter == y
。你只需要一个或另一个;你实际上并没有在循环中使用counter
。正如您已经知道循环的次数,您可以轻松地counter = 10
然后for y in range(counter)
,这意味着您不需要在循环内增加counter
。此外,您可以在Python中更优雅地增加:counter += 1
。
for y in range(10):
if my_lst[y] < 5:
...
正如其他人所指出的,这里的问题是你要将字符串与整数进行比较(你可以用int(my_lst[y]) < 5
或my_lst[y] < str(5)
来解决这个问题,但正如我在上面所说,我们已经知道{ {1}}。
但是,值得强调的是,您不需要进行此项检查。你可以简单地停止循环,因为我们已经知道列表中的项只是每个整数的字符串表示:
my_lst[y] == str(y)
答案 4 :(得分:0)
我认为主要的问题是my_lst包含字符串,因此“&lt; 5”比较无效(此比较不符合您的想法)。
您可以将my_lst值转换回“int”进行比较:
my_lst = []
for x in range(10):
my_lst.append(str(x))
counter = 0
weird_num = ''
for y in range(10):
if int(my_lst[y]) <= 5:
weird_num = weird_num + my_lst[y]
counter = counter + 1
print weird_num, counter
其他几点:
weird_num = ''
<= 5: