给出两个列表的匹配元素的索引,其中一个列表具有冗余条目

MER*_*ose 2 python indexing list

我有两个清单,a并且b.a包含我想知道的匹配元素索引的元素b.在b,每个元素都是独一无二的,不同于a.

a = [1993, 1993, 1994, 1995, 1996, 1996, 1998, 2003, 2005, 2005]
b = [1966, 1967, 1968, 1969, 1970, 1971, 1972, 1973, 1974, 1975, 1976, 1977, 1978, 1979, 1980, 1981, 1982, 1983, 1984, 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014]
Run Code Online (Sandbox Code Playgroud)

使用Python中查找列表中匹配元素索引的解决方案:

matching = [match for match, element in enumerate(b) if element in a]
Run Code Online (Sandbox Code Playgroud)

matching但是只是[27, 28, 29, 30, 32, 37, 39],但我希望它是[27, 27, 28, 29, 30, 30, 32, 37, 39, 39].

Len*_*bro 6

>>> a = [1993, 1993, 1994, 1995, 1996, 1996, 1998, 2003, 2005, 2005]
>>> b = [1966, 1967, 1968, 1969, 1970, 1971, 1972, 1973, 1974, 1975, 1976, 1977, 1978, 1979, 1980, 1981, 1982, 1983, 1984, 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014]
>>> [b.index(x) for x in a]
[27, 27, 28, 29, 30, 30, 32, 37, 39, 39]
Run Code Online (Sandbox Code Playgroud)

  • 在这种情况下工作但如果`a`中的任何值不在`b`中,则会引发ValueError.`[b.index(x)for if in a b.count(x)]`会更安全...... (3认同)