我有一个如下所示的列表:
['Blake 4', 'Bolt 1', 'De Grasse 3', 'Gatlin 2', 'Simbine 5', 'Youssef Meite 6']
我正在尝试打印这个:
Blake
Bolt
De Grasse
Gatlin
Simbine
Youssef Meite
如何编写处理此场景的列表理解?我尝试使用split
并编制索引,但我用过的任何内容都没有用。
答案 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])