Python 创建重复另一个列表中元素的列表

Python 创建重复另一个列表中元素的列表,python,Python,我必须创建一个列表,如果每个元素第一次出现在列表中,则每个元素都会得到0(因此,如果x在lis[0:lis.index(x)]中,则x取1作为值),如果它以前已经出现过,则取1 lis = [1,2,2,3,1,4,5,5,6,4] l_tmp = [1 if x in lis[0:lis.index(x)] else 0 for x in lis] 我希望得到如下输出: l_tmp=[0,0,1,0,1,0,0,1,0,1] 但我得到的是: l_tmp=[0,0,0,0,0,0,0,0,0

我必须创建一个列表,如果每个元素第一次出现在列表中,则每个元素都会得到0(因此,如果x在lis[0:lis.index(x)]中,则x取1作为值),如果它以前已经出现过,则取1

lis = [1,2,2,3,1,4,5,5,6,4]
l_tmp = [1 if x in lis[0:lis.index(x)] else 0 for x in lis]
我希望得到如下输出:

l_tmp=[0,0,1,0,1,0,0,1,0,1]
但我得到的是:

l_tmp=[0,0,0,0,0,0,0,0,0,0] 

我做错了什么?

索引的使用不正确,您需要跟踪元素的当前索引(而不是元素的第一次出现)。这是您打算做的:

lis = [0, 1, 1, 2, 0, 3, 4, 4, 5, 3]
[1 if x in lis[:i] else 0 for i, x in enumerate(lis)]
=> [0, 0, 1, 0, 1, 0, 0, 1, 0, 1]

这里有一个功能性的方法来实现您想要的,而不必扫描每个元素的输入列表

import itertools

x = [0,1,1,2,0,3,4,4,5,3]
def fn(a, b):
    if b in a[0]:
        return (a[0], 1)
    a[0].add(b)
    return (a[0], 0)
    
y = itertools.accumulate(x, fn, initial=(set(), None))
result = filter(None.__ne__, map(lambda x: x[1], y)) # First element is None
assert list(result) == [0, 0, 1, 0, 1, 0, 0, 1, 0, 1]

你想做什么?
index
返回第一次发生的索引更准确地描述你想实现的目标以及你在lis[0:lis.index(x)]中得到的结果
x
将始终为
False
。如果
x
在主列表中,它将始终是您正在搜索的子列表之外的下一个元素。我马上猜到您想要什么。奥斯卡已经给了你答案,否则我会的。我从一开始就认为阿比吉特对奥斯卡的回答是错误的。他没有说他想要什么,你也没有解释你认为他想要什么。这只是代码转储和代码转储的对比。@AbhijitSarkar OP提供了示例输入和预期输出,他的代码的意图很清楚,错误在哪里。我的解决方案满足了预期的输出。很明显,他的代码没有达到他想要的效果,否则他就不会在这里了。所以,他的代码并不重要;在他说出他想做什么之前,你们只是猜测,并没有解决方案。他的标题不是说他想实现什么吗?“创建一个列表,重复另一个列表中的元素”?这个标题和“朝鲜现在的天气如何”一样清晰、相关。