转换值列表

2024-04-27 21:25:57 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个字符串列表(我的实际列表要长得多):

Animals = ["Dog", "1", "F", "2",
           "Cat", "M",
           "Horse", "40", "D", "9", 
           "Human", "50", "E",
           "Zebra", "50", "4", "P", "A", "19",
           "Dog", "60", "1"]

如果有用的话,我还有动物名字的清单:

Animal_names = ["Dog", "Cat", "Horse", "Human", "Zebra"]

我要做的是将其转换为以下内容(以动物名称开始的列表和名称后面的后续值,并在下一个名称出现在动物名称中之前结束):

[["Dog", "1", "F", "2"],
 ["Cat", "M"],
 ["Horse", "40", "D", "9"], 
 ["Human", "50", "E"],
 ["Zebra", "50", "4", "P", "A", "19"],
 ["Dog", "60", "1"]]

有什么方法可以很容易地做到吗?你知道吗


Tags: 方法字符串名称列表names名字cat动物
3条回答

这应该是一个可行的解决方案:D.它包括循环遍历大列表中的元素,并在每次找到新的动物时开始一个新的列表。你知道吗

final_list=[]
animal_list=[]
for animal in Animals:
    if animal in Animal_names:
        if len(animal_list):
            final_list.append(animal_list)
        animal_list=[animal]
    else:
        animal_list.append(animal)

final_list.append(animal_list)
final_list

创建一个新数组并用值填充它,直到它达到存在于Animal_names中的值,然后追加、清除并重复。你知道吗

array = []
sub_array = []

for item in Animals:

  # Check if the item is an animal name. If it is, add the previous animal to array
  if item in Animal_names:
    if len(sub_array) != 0:
      array.append(sub_array)
      sub_array = []

  sub_array.append(item)

array.append(sub_array)  # get the last animal too

短方法(假设输入列表以一个现存的动物名开始):

res = []
for a in animals:
    if a in animal_names:
        res.append([a])
    else:
        res[-1].append(a)
print(res)

输出:

[['Dog', '1', 'F', '2'], ['Cat', 'M'], ['Horse', '40', 'D', '9'], ['Human', '50', 'E'], ['Zebra', '50', '4', 'P', 'A', '19'], ['Dog', '60', '1']]

或者没有else分支的另一种方式-但这将导致更多的append调用(因此应被视为较慢的之一):

res = []
for a in animals:
    if a in animal_names:
        res.append([])
    res[-1].append(a)

相关问题 更多 >