python连续元素交换列表项

时间:2019-09-25 18:12:14

标签: python

我的输入如下:

 ['a','b','c','d','e','f'] 

输出:

 ['b','a','d','c','f','e']

我尝试获取连续列表,但我在空字符串之间获取列表,因此请删除这些空列表。

s = list(input().split())

def swap(c, i, j):
    c[i], c[j] = c[j], c[i]
    return ' '.join(c)

result = swap(s, 0, 1)
print(list(result))

当前输出:-['b', ' ', 'a', ' ', 'c', ' ', 'd', ' ', 'e', ' ', 'f']

预期输出:-['b', 'a', 'c', 'd', 'e','f']

4 个答案:

答案 0 :(得分:2)

您只需要将c返回为list,就无需转换为字符串并再次返回列表:

s = ['a','b','c','d','e','f']

def swap(c, i, j):
  c[i], c[j] = c[j], c[i]
  return c

result = swap(s, 0, 1)
print(result)

输出:

['b', 'a', 'c', 'd', 'e', 'f']

答案 1 :(得分:0)

这是问题。.您加入太空。将其更改为以下内容。

def swap(c, i, j):
  c[i], c[j] = c[j], c[i]
  return ''.join(c)

对于您的输出,您还可以执行以下操作。

l = [x for x in [your output list] if x!= ' ']

l = [x for x in [your output list] if len(x.strip()) > 0]

答案 2 :(得分:0)

嗨,请仅返回“ C”并使用递归交换列表的所有元素,然后您将获得预期的输出。检查以下代码。

以下代码的输出= ['b','a','d','c','f','e']

s = ['a','b','c','d','e','f']

def swap(c, i, j):
    if j<=len(c) and len(c)%2==0:
        c[i], c[j] = c[j], c[i]
        swap(c,i+2,j+2)
    elif j<len(c):
        c[i], c[j] = c[j], c[i]
        swap(c,i+2,j+2)
    return c

result = swap(s, 0, 1)
print(list(result))

,如果您只想输出= ['b','a','c','d','e','f'],则无需递归,只需返回以下代码中的c检查即可:

s = ['a','b','c','d','e','f']

def swap(c, i, j):
    c[i], c[j] = c[j], c[i]
    return c

result = swap(s, 0, 1)
print(list(result))

答案 3 :(得分:0)

一个简单的交换对功能,它不会更改输入:

def swap_pairs(list_to_swap):
    s = list_to_swap[:] # create copy to not touch the original sequence
    for i in range(0, len(s)-1, 2):
        s[i], s[i+1] = s[i+1], s[i]
    return s

s0 = ['a', 'b', 'c', 'd', 'e', 'f', 'g']
s1 = ['a', 'b', 'c', 'd', 'e', 'f']
print(swap_pairs(s0))
print(swap_pairs(s1))
# ['b', 'a', 'd', 'c', 'f', 'e', 'g']
# ['b', 'a', 'd', 'c', 'f', 'e']

### check if s0 and s1 are untouched:
print(s0)
print(s1)
# ['a', 'b', 'c', 'd', 'e', 'f', 'g']
# ['a', 'b', 'c', 'd', 'e', 'f']

如果要“就地”交换对,即直接更改输入,则可以将过程缩短为

def swap_pairs(s):
    for i in range(0, len(s)-1, 2):
        s[i], s[i+1] = s[i+1], s[i]
    # return s
s1 = ['a', 'b', 'c', 'd', 'e', 'f']
swap_pairs(s1)
print(s1)
# ['b', 'a', 'd', 'c', 'f', 'e']

如果在此处添加return语句,我认为这是一个品味问题。我认为返回 not 更为明确,因为逻辑上不需要。无论如何,要注意可变范围。