我们可以在python列表中添加相同的元素两次吗?

我们可以在python列表中添加相同的元素两次吗?,python,list,Python,List,问题是: 这是一个长度为M的数组,数字范围为1。。。N、 在哪里 N小于或等于20。我们要通过它,并计算如何 多次遇到每个数字。也就是说,它就像元音计数 任务,但我们需要维护多个计数器。一定要使用 为它们创建单独的数组,不要创建很多单独的变量, 每个柜台一个 输入数据在第一行中包含M和N。第二个(相当长) 行将包含以空格分隔的M个数字。答案应该包括 正是N个值,由空格分隔。首先应该给出数量 1秒,2秒的秒数,依此类推 例如: 数据输入:10323113 答复:5 2 3 以下是我针对此问题的代码

问题是:

这是一个长度为M的数组,数字范围为1。。。N、 在哪里 N小于或等于20。我们要通过它,并计算如何 多次遇到每个数字。也就是说,它就像元音计数 任务,但我们需要维护多个计数器。一定要使用 为它们创建单独的数组,不要创建很多单独的变量, 每个柜台一个

输入数据在第一行中包含M和N。第二个(相当长) 行将包含以空格分隔的M个数字。答案应该包括 正是N个值,由空格分隔。首先应该给出数量 1秒,2秒的秒数,依此类推

例如:

数据输入:10323113

答复:5 2 3

以下是我针对此问题的代码:

# 10 3
# 3 2 1 2 3 1 1 1 1 3

# [1, 0, 0]
# expected: [5, 2, 3]



# Transfer the first line input into number lista:
rawone = input()
stringa = rawone.split()
lista = []
for el in stringa:
    lista.append(int(el))
# check the function:
# print (lista)
# Transfer the second line input into number listb:
rawtwo = input()
stringb = rawtwo.split()
listb = []
for ele in stringb:
    listb.append(int(ele))
# check the function:
# print (listb)

# initiate a few variables:
t = 0 # the current time
times = lista[1] # the total time
print (times)
d = 1 # detect key
n = 0 # the number of qualified candidate
out = [] # the list of output
elist = []


# method: while (t<times) --> for element in listo: if (el==d) --> n=n+1:

# THIS PART HAS SOME PROBLEMS!!!
while t < times:
    n = 0 # reinitiate the n
    for elem in listb: # ***WHY THIS FOR LOOP CAN ONLY BE EXCUTE ONCE AND NOT WORK ANY MORE???
        if elem == d:
            elist += [(elem)]
        d = d + 1
    out.append(len(elist))
    print (elist)

    t = t + 1

print (out) 
#10 3
# 3 2 1 2 3 1 1 1 1 3
# [1, 0, 0]
#预期:[5,2,3]
#将第一行输入传输到数字列表A:
rawone=input()
stringa=rawone.split()
lista=[]
对于stringa中的el:
lista.append(int(el))
#检查功能:
#打印(列表A)
#将第二行输入传输到数字列表B:
RAWTOW=输入()
stringb=rawtow2.split()
listb=[]
对于stringb中的ele:
listb.append(int(ele))
#检查功能:
#打印(列表B)
#启动几个变量:
t=0#当前时间
times=lista[1]#总时间
印刷(次)
d=1#检测键
n=0#合格候选人人数
out=[]#输出列表
elist=[]
#方法:while(t)表示列表中的元素:if(el==d)-->n=n+1:
#这部分有一些问题!!!
而t<次:
n=0#重新初始化n
对于列表B中的元素:#***为什么这个for循环只能执行一次而不能再工作???
如果elem==d:
elist+=[(元素)]
d=d+1
out.append(len(elist))
打印(elist)
t=t+1
打印(输出)
因此,我对公式部分有一些问题,这不是我所期望的。我检查了我的答案。我很困惑为什么它每次只添加一个合格元素。我如何解决这个问题?感谢您的慷慨帮助

所以问题已经解决了,我的最终代码如下:

# Transfer the first line input into number lista:
rawone = input()
stringa = rawone.split()
lista = []
for el in stringa:
    lista.append(int(el))
# check the function:
# print (lista)
# Transfer the second line input into number listb:
rawtwo = input()
stringb = rawtwo.split()
listb = []
for ele in stringb:
    listb.append(int(ele))
# check the function:
# print (listb)

# initiate a few variables:
t = 0 # the current time
times = lista[1] # the total time
# print (times)
d = 1 # detect key
n = 0 # the number of qualified candidate
out = [] # the list of output
elist = []


# method: while (t<times) --> for element in listo: if (el==d) --> n=n+1:

# THIS PART HAS SOME PROBLEMS!!!
while t < times:
    n = 0 # reinitiate the n
    for elem in listb: # ***WHY THIS FOR LOOP CAN ONLY BE EXCUTE ONCE AND NOT WORK ANY MORE???
        if elem == d:
            elist.append(elem)
    d = d + 1
    out.append(len(elist))
    elist = [] # reinitiate elist
    # print (elist)

    t = t + 1
print(" ".join(str(x) for x in out))
#将第一行输入转换为数字列表A:
rawone=input()
stringa=rawone.split()
lista=[]
对于stringa中的el:
lista.append(int(el))
#检查功能:
#打印(列表A)
#将第二行输入传输到数字列表B:
RAWTOW=输入()
stringb=rawtow2.split()
listb=[]
对于stringb中的ele:
listb.append(int(ele))
#检查功能:
#打印(列表B)
#启动几个变量:
t=0#当前时间
times=lista[1]#总时间
#印刷(次)
d=1#检测键
n=0#合格候选人人数
out=[]#输出列表
elist=[]
#方法:while(t)表示列表中的元素:if(el==d)-->n=n+1:
#这部分有一些问题!!!
而t<次:
n=0#重新初始化n
对于列表B中的元素:#***为什么这个for循环只能执行一次而不能再工作???
如果elem==d:
elist.append(elem)
d=d+1
out.append(len(elist))
elist=[]重新初始化elist
#打印(elist)
t=t+1
打印(“.join(str(x)表示x输入输出))
我意识到这可能不算你的作业,但无论如何:

from collections import Counter
N = 3
my_list = [3, 3, 2, 1, 2, 3, 1, 1, 1, 1, 3]

c = Counter(my_list)
print(" ".join(c[i+1] for i in range(N)))

由于变量名和额外变量不好,您的代码很难理解。在继续编程时,请寻找更好的编码示例

您遇到的主要问题是,在内部循环中增加了d。将语句d=d+1取消缩进一级。这意味着您每次通过外部循环时只增加d一次

更好的是,只需使用外部循环即可。因为您已经知道需要执行多少次,所以也可以在外部使用for循环:

for d in range(1, times+1):
    n = 0   # reinitiate the n
    for elem in listb:  # ***WHY THIS FOR LOOP CAN ONLY BE EXCUTE ONCE AND NOT WORK ANY MORE???
        if elem == d:
            elist += [elem]
    out.append(len(elist))
    print (elist)

print (out)
这至少让您的输出更接近您想要的:

[1, 1, 1, 1, 1]
[1, 1, 1, 1, 1, 2, 2]
[1, 1, 1, 1, 1, 2, 2, 3, 3, 3]
[5, 7, 10]
现在,您可以解决下一个问题:只计算该特定数字的条目,而不是计算到目前为止找到的所有数字。为此,请确保每次清理列表,而不是只清理一次:

for d in range(1, times+1):
    elist = []
    for elem in listb:
    ...
…最终获得输出:

[1, 1, 1, 1, 1]
[2, 2]
[3, 3, 3]
[5, 2, 3]
我希望你能从这里结束


还请注意,您可以简单地将out设置为您找到的元素的直接计数。如果找到1,则递增out的第一个元素;如果找到2,则递增第二个元素,依此类推。该段的代码没有外循环;它看起来就像这样:

out = [0] * times
for elem in listb:
    out[elem-1] += 1

print (out)

这将替换下面的所有代码打印(次)

@Prune将向您展示如何修复代码。我还想向您展示如何用更少的代码解决此问题(使用列表而不是诉诸
集合。计数器

因为给定了M和N,所以最好将它们存储在这些名称的变量中

first_line = [int(x) for x in input().split()]
M, N = first_line
second_line = [int(x) for x in input().split()]
现在创建一个包含N个零的列表(数组)

result = [0] * N  
记住列表(数组)索引从0开始,所以我们需要从每个
elem

for elem in second_line:
    result[elem - 1] += 1
显示结果

print(result)

我不明白问题的标题与问题的关系。问题标题的答案是“是”。代码提示:使用有意义的变量(不是
lista
listb
elist
等等),你不必做外循环,只需将实际数字传递一次(
3 2 1 1 1 1 1 3
)够了。我不知道您的代码尝试的逻辑是什么,但是因为我看到了
append
s和其他东西,我可以看出它走错了方向。解决这个问题的明显方法是从
0
s列表开始,然后使用输入列表中的值作为increment语句的索引。但是这很重要!是的,我不取消请接受该方法,但谢谢您的帮助。我将尝试编写更简化的代码