我正在尝试创建一个将列表作为输入参数的函数。我将使用while循环对列表进行迭代,并跟踪列表中包含的整数和字符串的数量。这是我到目前为止所拥有的:
def usingwhileloop(mylist):
count = 0
int_total = 0
str_total = 0
while count <= len(mylist):
if isinstance(mylist[count], int) == True:
int_total = int_total + 1
elif isinstance((mylist[count]), str) == True:
str_total = str_total + 1
count = count + 1
newlist = [int_total, str_total]
return newlist
当我运行诸如[1、2、3,“ a”,“ b”,4]之类的列表时,它应该返回[4、2],但我收到以下错误:“第51行,在usingwhile循环中 如果isinstance(what [count],int)==真: IndexError:列表索引超出范围”
我在做什么错?我在while循环中苦苦挣扎...
答案 0 :(得分:1)
这是因为您试图访问列表中不存在的项目。
为什么?假设我们以该列表为例-[1, 2, 3, “a”, “b”, 4]
计数从0开始,所以我假设您希望计数从0到5。
0: 1
1: 2
2: 3
3: "a"
4: "b"
5: 4
但是,len(mylist)
是6
,因此循环将尝试访问不存在的mylist[6]
。
您必须修改while循环以改为在5处停止。为此,可以使用while count <= len(mylist) - 1:
或while count < len(mylist):
。
答案 1 :(得分:1)
如果您确实需要使用while循环,请查看josephting的答案。
对于您显示的示例,您不需要while
循环,例如
"""
Some simple functions
"""
def count_types_ex1(items):
"""Count types from a list"""
counters = [0, 0]
for item in items:
if isinstance(item, int):
counters[0] += 1
elif isinstance(item, str):
counters[1] += 1
return counters
print(count_types_ex1([1, 2, 3, 'a', 'b', 4]))
def count_types_ex2(items):
"""Count types from a list"""
check_type = lambda x: [int(isinstance(x, int)), int(isinstance(x, str))]
counters = [check_type(x) for x in items]
return sum(x[0] for x in counters), sum(x[1] for x in counters)
print(count_types_ex2([1, 2, 3, 'a', 'b', 4]))
输出:
[4, 2]
(4, 2)