Конкатенация строк дает неправильный вывод в Python? - PullRequest
0 голосов
/ 19 августа 2010

У меня есть этот код:

filenames=["file1","FILE2","file3","fiLe4"]


def alignfilenames():
    #build a string that can be used to add labels to the R variables.
    #format goal: suffixes=c(".fileA",".fileB")
    filestring='suffixes=c(".'
    for filename in filenames:
        filestring=filestring+str(filename)+'",".'

    print filestring[:-3]
    #now delete the extra characters
    filestring=filestring[-1:-4]
    filestring=filestring+')'
    print "New String"
    print str(filestring)

alignfilenames()

Я пытаюсь получить строковую переменную, похожую на этот формат: suffixes=c(".fileA",".fileB".....), но добавление последней скобки не работает.Когда я запускаю этот код как есть, я получаю:

suffixes=c(".file1",".FILE2",".file3",".fiLe4"
New String
)

Есть идеи, что происходит или как это исправить?

Ответы [ 3 ]

11 голосов
/ 19 августа 2010

Делает ли это то, что вы хотите?

>>> filenames=["file1","FILE2","file3","fiLe4"]
>>> c = "suffixes=c(%s)" % (",".join('".%s"' %f for f in filenames))
>>> c
'suffixes=c(".file1",".FILE2",".file3",".fiLe4")'

Использование string.join - намного лучший способ добавить общий разделитель в список элементов. Это устраняет необходимость проверять наличие последнего элемента перед добавлением разделителя или, в вашем случае, пытаться удалить последний добавленный элемент.

Кроме того, вы можете посмотреть Список понятий

2 голосов
/ 20 августа 2010

Похоже, вы пытаетесь использовать python для написания R-скрипта, который может быть быстрым решением, если вы не знаете, как это сделать в R. Но в этом случае решение только для R на самом деле довольнопросто:

R> filenames= c("file1","FILE2","file3","fiLe4")
R> suffixes <- paste(".", tolower(filenames), sep="")
R> suffixes
[1] ".file1" ".file2" ".file3" ".file4"
R> 
1 голос
/ 20 августа 2010

Что происходит, это нарезка возвращает пустую строку

filestring=filestring[-1:-4]

Потому что конец перед началом. Попробуйте следующее в командной строке:

>>> a = "hello world"
>>> a[-1:-4]
''

Решение вместо этого сделать

filestring=filestring[:-4]+filestring[-1:]

Но я думаю, что вы на самом деле хотели просто выбросить последние три символа.

filestring=filestring[:-3]

Лучшее решение - использовать метод объединения строк, как sberry2A предложил

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...