我试图获取某些数据中某些元素的索引。我想找到'b'和'c'的所有实例,并将它们的索引放在'position_b'和'position_c'中。这是我写的代码,我收到错误:
data = [['a', 'b', 'c'], ['a', 'a', 'a'], ['b', 'c', 'c'], ['d', 'b', 'f'], ['g', 'c', 'i']]
position_b, position_c = [], []
for line in data:
if data.startswith("b"):
position_b.append(line.index("b"))
elif data.startswith("c"):
position_c.append(line.index("c"))
如上面的数据所示,有些行不会有b或c,有些行会同时有两行。
我最初只尝试'索引',但这给了我'未找到子字符串'错误,因为有些列表没有'b'或'c'。然后我从答案here尝试'startswith',但这给了我错误'AttributeError:'list'对象没有属性'startswith''我现在明白,startswith不能用于列表对象。我可以用什么来查找和列出我列表中的'b'或'c'?
期望的输出:
position_b = [1, 0, 1]
position_c = [2, 1, 2, 1]
答案 0 :(得分:0)
虽然您希望使用startswith
,但您似乎只想知道列表是否包含某个项目,无论其位置如何。因此,您只需使用in
关键字。
if "b" in data:
position_b.append(line.index("b"))
或者:
try:
index = line.index("b")
except ValueError:
# line doesn't contain "b"
pass
else:
position_b.append(index)
希望这有帮助!
答案 1 :(得分:0)
您可以使用list comprehension
以这种方式完成任务:
我认为data
变量是这样的列表列表:
data = [['a', 'b', 'c'], ['a', 'a', 'a'], ['b', 'c', 'c'], ['d', 'b', 'f'], ['g', 'c', 'i']]
所以,你可以这样做:
position_b = [(k,i) for k,v in enumerate(data) for i,j in enumerate(v) if j == 'b']
position_c = [(k,i) for k,v in enumerate(data) for i,j in enumerate(v) if j == 'c']
print("position_b:", position_b)
print("position_c:", position_c)
输出:
# position: 0, 1
# v v
position_b: [(0, 1), (2, 0), (3, 1)]
position_c: [(0, 2), (2, 1), (2, 2), (4, 1)]
修改强>:
只能使用list comprehension
和for loops
这样的方式编写整个enumerate
语法:
position_b, position_c = [], []
for k,v in enumerate(data):
for i,j in enumerate(v):
if j == 'b':
position_b.append((k,i))
if j == 'c':
position_c.append((k,i))
print(position_b)
print(position_c)
输出:
[(0, 1), (2, 0), (3, 1)]
[(0, 2), (2, 1), (2, 2), (4, 1)]