def first_and_last(list_1):
new_list = [i for i in list_1 if i ==(list_1[0] or list_1[len(list_1 - 1)])]
return new_list
输入数字序列后,输出与原始列表保持一致。我认为我的列表理解会出现问题
a= [input("Enter a sequence of numbers separated by commas :")]
b = first_and_last(a)
print (b)
答案 0 :(得分:0)
我的python控制台的以下输出可能已经阐明了一些事项:
>>> new_list = [input()]
1, 2, 3, 4
>>> new_list
[(1, 2, 3, 4)]
>>> l = [i for i in new_list if i==(new_list[0] or new_list[-1])]
>>> l
[(1, 2, 3, 4)]
>>> new_list[-1]
(1, 2, 3, 4)
您有一个列表,但您的列表a
只有一个元素。在我的示例中,a
仅包含元素(1, 2, 3, 4)
。
当你进行列表推导时,你会得到元素,如果它等于第一个或最后一个元素 - 它就是这样做的。并且没有错误,因为索引-1
只代表列表中的最后一个元素。
您可以将输入元组转换为列表:
>>> list(input())
1, 2, 3, 4
[1, 2, 3, 4]
然后,您的列表理解可以起作用 我不确定你的if语法是否有效。我会选择
>>> li = list(input())
1, 2, -3, 4
>>> new_list = [i for i in li if (li[0]==i or i==li[-1])]
>>> new_list
[1, 4]
>>> lix = list(input())
1, 1, 2, 3, 4, 2
>>> other_list = [i for i in lix if (lix[0]==i or i==lix[-1])]
>>> other_list
[1, 1, 2, 2]
如果您使用if语法,那么您要测试的是元素是否等于(li[0] or li[-1])
。我相信这总是0或1,因为它是一个布尔表达式。
>>> other_list = [i for i in lix if i==(lix[0] or lix[-1])]
>>> other_list
[1, 1]
我在python 2.7.14
中对此进行了测试,因此您的语法可能略有不同。
答案 1 :(得分:0)
代码:
def first_and_last(input):
list = input.split(',')
match = list[0], list[-1]
return [i for i in list if i in match]
答案 2 :(得分:0)
我发现了两个问题:
1)
a = [input("Enter a sequence of numbers separated by commas :")]
这将为您提供一个列表,其中包含整个字符串作为单个元素,但不包含单个元素。例如,在执行此字符串时,您将获得...
a = ['1,2,3,4,5']
要解决此问题,您需要获取字符串输入并将其拆分为","
a = input("Enter a sequence of numbers separated by commas :").split(",")
2)
列表推导中使用的条件过滤器是错误的。
2 or 3 = 2
3 or 2 = 3
0 or 2 = 2
2 or 0 = 2
如果有" 0" element返回另一个非零元素,如果两者都不为零则返回第一个元素,因此
如果我的名单是......
a = [1 , 2 , 3]
b = first_and_last(a)
print(b)
这将导致
b = [3]
因此,正确的条件或方法将是
new_list = [i for i in list_1 if i == list_1[0] or i == list_1[len(list_1 - 1)]]
或
b = list()
b.append(a[0])
b.append(a[len(a)-1])