当将字符串列表传递给Python中的join()函数时,如何解释结果?

时间:2019-06-20 21:14:42

标签: python string list join

当我错误地在联接函数中传递了一个转换为字符串的列表时,我在操纵联接函数。结果非常奇怪,如下面的代码所示。

解释结果的最佳方法是什么?

test =  ['2', '1', '3']
s = 'x'
print(s.join(str(test)))

输出

[x'x2x'x,x x'x1x'x,x x'x3x'x]

2 个答案:

答案 0 :(得分:2)

基本上,当您键入str(test)时,python会生成一个字符串"['2', '1', '3']"。这是一个包含15个字符的字符串(不要被'所迷惑,这些字符也被视为字符。

现在,当您执行s.join(str(test))时,您可以将其视为在字符串的每个字符之间放置一个x

最初的字符顺序是:

[ --> ' --> 2 --> ' --> , --> ' --> 1 --> ' --> , -->' --> 3 --> ' --> ]

然后'x'.join(str(test))x放在上面有箭头(-->)的任何地方。

join的典型用法是传递列表而不是字符串作为参数。例如,如果您写了:

s.join(test)

它将返回:

'2x1x3'

答案 1 :(得分:1)

.join函数将列表的元素组合成带有您定义的某些定界符的字符串。如果您传递一个字符串,尽管它会将其拆分为一个列表,然后将其与定界符连接起来。因此,您将字符串列表传递给了它,并拆分为:

public StateMachine extends ListenerAdapter {
    private final long messageId;
    private final long userId;
    private final String emoji;

    private int state = 0;

    public StateMachine(...) {...}

    @Override
    public void onMessageReactionAdd(MessageReactionAddEvent event) {
        if (event.getMessageIdLong() != messageId) return;
        if (event.getUser().getIdLong() != userId) return;
        if (!event.getReactionEmote().getName().equals(emoji)) return;
        switch (state) {
        case 0:
            System.out.println("yes");
            event.getChannel().editMessageById(messageId, ...).queue();
            event.getReaction().removeReaction(event.getUser()).queue();
            state = 1;
            break;
        case 1:
            System.out.println("This is the next awaited event");
            // do something here...
            break;
        }
    }
}

然后与'x'结合在一起