如何在列表中打印部分项目?

时间:2017-02-01 20:44:59

标签: python

我有一个如下所示的列表:

['Blake 4', 'Bolt 1', 'De Grasse 3', 'Gatlin 2', 'Simbine 5', 'Youssef Meite 6']

我正在尝试打印这个:

Blake
Bolt
De Grasse
Gatlin
Simbine
Youssef Meite

如何编写处理此场景的列表理解?我尝试使用split并编制索引,但我用过的任何内容都没有用。

3 个答案:

答案 0 :(得分:2)

假设所有值都保留该模式,拆分并重新连接,忽略分割数组中的最后一个值:

l = ['Blake 4', 'Bolt 1', 'De Grasse 3', 'Gatlin 2', 'Simbine 5', 'Youssef Meite 6']
for x in l:
   print(' '.join(x.split()[:-1]))

否则,使用正则表达式来消除数字:

import re
l = ['Blake 4', 'Bolt 1', 'De Grasse 3', 'Gatlin 2', 'Simbine 5', 'Youssef Meite 6']
for x in l:
    print(re.sub(' \d+', '', x))

答案 1 :(得分:1)

列表理解对打印的东西(或者你不需要返回值的任何操作)都没用。

在您的情况下,您可以在循环中使用str.rpartition仅打印字符串中找到的最右边空格的左侧:

l =['Blake 4', 'Bolt 1', 'De Grasse 3', 'Gatlin 2', 'Simbine 5', 'Youssef Meite 6']
for s in l:
    print(s.rpartition(" ")[0])

从列表中删除最后一位数字将是listcomp的一个很好的用法:

newl = [s.rpartition(" ")[0] for s in l]

答案 2 :(得分:1)

试试这个:

    printf("Printing the contect of the TXT file\n");
int countS=-1,countQ=-1;
char line[10];
FILE *fp;
fp = fopen("car.txt","r");
if (fp == NULL) {
    printf("Error: File doesn't exist exiting the programm!");
    exit(1);
}
while(!feof(fp)){
      fgets(line,10,fp);
      printf("%s",line);

       if(line[(strlen(line))-2]=='Q'){
        countQ++;
        line[strlen(line)-2] = 0;
        strcpy(car_id,line);
        strcpy(QBoat->car_id[countQ],car_id);
        QBoat->rear=countQ;
        QBoat->front=0;
        QBoat->size=countQ;
       }else if(line[(strlen(line))-2]=='S'){
        countS++;
        line[strlen(line)-2] = 0;
        SBoat->top = countS;
        //strcpy(SBoat->car_id[countS],line);
       }

}
fclose(fp);

索引足以解决您的问题。

基于@ Jean-François的评论,如果你试图删除最后一个空格之前的所有字符,你可以这样做:

l = ['Blake 4', 'Bolt 1', 'De Grasse 3', 'Gatlin 2', 'Simbine 5', 'Youssef Meite 6']
for i in l:
    print(i[:-2])