Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jquery-ui/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何删除列表中第一个出现的整数_Python_Python 3.x - Fatal编程技术网

Python 如何删除列表中第一个出现的整数

Python 如何删除列表中第一个出现的整数,python,python-3.x,Python,Python 3.x,这是我的代码: positions = [] for i in lines[2]: if i not in positions: positions.append(i) print (positions) print (lines[1]) print (lines[2]) 输出为: ['1', '2', '3', '4', '5'] ['is', 'the', 'time', 'this', 'ends'] ['1', '2', '3', '4', '1', '5']

这是我的代码:

positions = []
for i in lines[2]:
    if i not in positions:
        positions.append(i)
print (positions)
print (lines[1])
print (lines[2])
输出为:

['1', '2', '3', '4', '5']
['is', 'the', 'time', 'this', 'ends']
['1', '2', '3', '4', '1', '5']
我希望我的可变位置的输出是;['2','3','4','1','5']
因此,与其从变量行[2]中删除第二个重复项,不如删除第一个重复项。

在构建位置之前,您需要首先检测重复的值。使用itertools.Counter对象测试某个值是否被多次看到:

from itertools import Counter

counts = Counter(lines[2])
positions = []
for i in lines[2]:
    counts[i] -= 1
    if counts[i] == 0:
        # only add if this is the 'last' value
        positions.append(i)
这将适用于任何数量的重复值;仅使用最后一个显示的值

您还可以反转列表,并使用集合跟踪您已经看到的内容,这比根据列表进行测试要快:

positions = []
seen = set()
for i in reversed(lines[2]):
    if i not in seen:
        # only add if this is the first time we see the value
        positions.append(i)
        seen.add(i)
positions = positions[::-1]  # reverse the output list

两种方法都需要两次迭代;第一个用于创建计数映射,第二个用于反转输出列表。哪个更快将取决于行[2]的大小和其中重复的数量,以及是否使用Python 3,其中计数器性能得到了显著提高。

在构建位置之前,您需要首先检测重复的值。使用itertools.Counter对象测试某个值是否被多次看到:

from itertools import Counter

counts = Counter(lines[2])
positions = []
for i in lines[2]:
    counts[i] -= 1
    if counts[i] == 0:
        # only add if this is the 'last' value
        positions.append(i)
这将适用于任何数量的重复值;仅使用最后一个显示的值

您还可以反转列表,并使用集合跟踪您已经看到的内容,这比根据列表进行测试要快:

positions = []
seen = set()
for i in reversed(lines[2]):
    if i not in seen:
        # only add if this is the first time we see the value
        positions.append(i)
        seen.add(i)
positions = positions[::-1]  # reverse the output list

两种方法都需要两次迭代;第一个用于创建计数映射,第二个用于反转输出列表。哪个更快将取决于行[2]的大小和其中重复的行数,以及是否使用Python 3,其中计数器性能得到了显著提高。

您可以反转列表,创建位置,然后按照@tobias_k在注释中提到的那样反转列表:

lst = ['1', '2', '3', '4', '1', '5']

positions = []
for i in reversed(lst):
    if i not in positions:
        positions.append(i)

list(reversed(positions))
# ['2', '3', '4', '1', '5']

您可以撤销您的列表,创建位置,然后按照@tobias_k在评论中提到的方式将其撤销:

lst = ['1', '2', '3', '4', '1', '5']

positions = []
for i in reversed(lst):
    if i not in positions:
        positions.append(i)

list(reversed(positions))
# ['2', '3', '4', '1', '5']

您可以使用字典保存元素的最后位置,然后使用该信息构建一个新列表

>>> data=['1', '2', '3', '4', '1', '5']
>>> temp={ e:i for i,e in enumerate(data) }
>>> sorted(temp, key=lambda x:temp[x])
['2', '3', '4', '1', '5']
>>> 

您可以使用字典保存元素的最后位置,然后使用该信息构建一个新列表

>>> data=['1', '2', '3', '4', '1', '5']
>>> temp={ e:i for i,e in enumerate(data) }
>>> sorted(temp, key=lambda x:temp[x])
['2', '3', '4', '1', '5']
>>> 

或者,可以使用positions.insert0、i或positions[:0]=[i]在前面插入,但追加和第二次反转可能更快。@tobias_k:追加和反转肯定会更快。非常感谢,但我第二次使用了更简单的方法来反转位置;我用positions.reverse代替了listreversedpositions。相反,也可以使用positions.insert0、i或positions[:0]=[i]在前面插入,但是追加和第二次反向可能会更快。@tobias_k:追加和反向肯定会更快。非常感谢,但我第二次使用了一种更简单的方法来反转位置;我使用positions.reverse代替listreversedpositions