Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/347.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 AttributeError:';列表';对象没有属性';从'开始;_Python - Fatal编程技术网

Python AttributeError:';列表';对象没有属性';从'开始;

Python AttributeError:';列表';对象没有属性';从'开始;,python,Python,我试图获取一些数据中某些元素的索引。我想找到'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.star

我试图获取一些数据中某些元素的索引。我想找到'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

最初我只尝试了“index”,但这给了我“substring not found”错误,因为有些列表没有“b”或“c”。然后我尝试了答案中的“StartWith”,但这给了我一个错误“AttributeError:“list”对象没有属性“StartWith”。我现在知道StartWith不适用于list对象。我可以使用什么来查找和索引列表中的“b”或“c”

期望输出:

position_b = [1, 0, 1]
position_c = [2, 1, 2, 1]

尽管您希望使用
startswith
,但似乎您只想知道列表是否包含某个项目,而不管其位置如何。因此,您只需在关键字中使用

if "b" in data:
    position_b.append(line.index("b"))
或:


希望这有帮助

您可以使用
列表理解
以如下方式完成任务:

data = [['a', 'b', 'c'], ['a', 'a', 'a'], ['b', 'c', 'c'], ['d', 'b', 'f'], ['g', 'c', 'i']]
我假设
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)]
[(0, 1), (2, 0), (3, 1)]
[(0, 2), (2, 1), (2, 2), (4, 1)]
编辑

整个
列表理解
语法可以这样编写,只需使用
for循环
枚举

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)
输出:

# position:   0, 1
#             v  v
position_b: [(0, 1), (2, 0), (3, 1)]
position_c: [(0, 2), (2, 1), (2, 2), (4, 1)]
[(0, 1), (2, 0), (3, 1)]
[(0, 2), (2, 1), (2, 2), (4, 1)]

列表没有startswith方法。有关此类问题,请参阅文档。请删除代码中重现错误所不需要的所有内容。似乎
line.split()
不太可能返回
['a','b','c']['d','b','f']['g','c','i']
(这到底是什么?字符串?),请提供准确的信息。简而言之,提供一个(没有
gzip
sys
和其他与您试图修复的异常无关的东西)数据是字符串列表还是列表列表,例如:
data=[['a','b','c',['a','a','a']
?一些人有相同的建议,所以我认为我错了-数据一定是列表列表。它是使用str.split生成的。如果我尝试第一个选项,在开始处添加position_b=[],在结束处添加print position_b,print语句只会给我空括号[],而不是我期望的[1,0,1]。第二个选项只给出列表中第一个“b”实例的索引,我希望它给出[0,1,2]来表示像['b','b','b']这样的列表。我很难理解这个列表,你能把它分解一下,以便我更好地理解发生了什么吗?当我试图把它分成几部分时,我在我的“if j=='b'”行中得到了“invalid syntax”。不过这很有效,谢谢你的帮助!现在检查,我已经更新了我的答案。