Hướng dẫn python check if list contains sequence - python kiểm tra xem danh sách có chứa chuỗi không

Tôi có một danh sách 5 INT từ 1 đến 6 (mô phỏng 5 con xúc xắc), ví dụ được tạo ngẫu nhiên: ví dụ:

L = [1,2,3,4,5]

và tôi muốn kiểm tra xem danh sách này khi được sắp xếp, có chứa

[1,2,3,4] or [2,3,4,5] or [3,4,5,6].

Làm thế nào tôi có thể kiểm tra xem danh sách l có chứa bất kỳ trong số 3 kết hợp? Tôi không muốn phải đi qua và kiểm tra xem có

L[i] == l1 [i],  L[i]== l2 [i],  L[i]== l3 [i]

cho int trong danh sách. Tôi cảm thấy như nó chỉ là một câu hỏi đơn giản là hỏi xem danh sách có chứa một trong hai danh sách khác hay một cái gì đó không. Tôi chỉ gặp khó khăn trong việc kết nối các dấu chấm và nó không nhấp cho tôi. Bất kỳ trợ giúp sẽ được đánh giá cao.

Đã hỏi ngày 2 tháng 3 năm 2015 lúc 2:56Mar 2, 2015 at 2:56

Hướng dẫn python check if list contains sequence - python kiểm tra xem danh sách có chứa chuỗi không

Toán tử

[1,2,3,4] or [2,3,4,5] or [3,4,5,6].
7 rất tiện dụng để xem liệu một chuỗi có chứa một mục duy nhất hay không, nhưng nó không hoạt động để kiểm tra danh sách các mục. Tuy nhiên, nó hoạt động trên các chuỗi, vì vậy chỉ cần chuyển đổi mọi thứ thành một chuỗi.

s = ''.join(str(i) for i in sorted(L))
if '1234' in s or '2345' in s or '3456' in s:
    # ...

Nếu bạn có nhiều điều kiện hơn để kiểm tra bạn có thể đơn giản hóa một chút:

if any(sublist in s for sublist in ('1234', '2345', '3456')):

Đã trả lời ngày 2 tháng 3 năm 2015 lúc 3:31Mar 2, 2015 at 3:31

Mark Ransommark RansomMark Ransom

292K40 Huy hiệu vàng384 Huy hiệu bạc610 Huy hiệu Đồng40 gold badges384 silver badges610 bronze badges

1

Bạn cần so sánh với bốn yếu tố đầu tiên và cuối cùng của L:

 L = [1,2,3,4,5]
 lst = [2,3,4,5]
 print(sorted(lst) in (L[1:], L[:4]) )

Vì vậy, một cái gì đó như:

any(sorted(lst) in (L[1:],L[:4]) for lst in rolls)

Đã trả lời ngày 2 tháng 3 năm 2015 lúc 3:20Mar 2, 2015 at 3:20

Hướng dẫn python check if list contains sequence - python kiểm tra xem danh sách có chứa chuỗi không

1

\ $ \ beingroup \ $

Chúng tôi không thể biết tại sao người phỏng vấn của bạn từ chối ứng dụng của bạn, nhưng những loại câu hỏi này thường là điểm bắt đầu cho cuộc trò chuyện-không phải là điểm cuối của sản phẩm. Nếu bạn viết mã đơn giản nhất, đơn giản nhất bạn có thể, bạn và người phỏng vấn của bạn sau đó có thể nói về những thứ như mở rộng, khái quát hóa và hiệu suất.

Người phỏng vấn của bạn biết rằng yêu cầu bạn thay đổi giao diện chức năng của bạn có vấn đề hơn vì bạn cũng sẽ phải thay đổi tất cả các bài kiểm tra đơn vị [chưa được mở cho] của bạn. Điều này làm chậm quá trình và có thể khiến người phỏng vấn lo lắng rằng bạn sẽ gây ô nhiễm cơ sở mã của họ với rất nhiều mã giòn.

Example:

contains123(list)

Đã trả lời ngày 14 tháng 12 năm 2016 lúc 18:25

8395 Huy hiệu bạc9 Huy hiệu Đồng

Xin chào, Python Noob ở đây.

Tôi đã dành 30 phút cuối cùng trên Google để trả lời nhưng không thể tìm thấy những gì tôi đang theo đuổi.

Hàm lấy một danh sách các số nguyên và trả về đúng nếu danh sách đã cho chứa chuỗi, ví dụ, [1, 2, 3] tại bất kỳ điểm nào trong danh sách và sai. Trình tự mục tiêu sẽ được xác định trước cho hàm.

[10, 15, 2, 5, 1, 2, 3] - đầu ra dự kiến ​​đúng

[10, 15, 2, 5, 1, 2, 5] - Đầu ra dự kiến ​​sai

\ $ \ beingroup \ $

Gần đây tôi đã nộp đơn xin là một lập trình viên Python nhưng đã bị từ chối.

Đây là vấn đề:

Viết mã Python để kiểm tra xem một mảng có trình tự không (1,3,4)

Giả sử họ đang tìm kiếm các lập trình viên Python chuyên gia, tôi có thể làm gì tốt hơn?

# Tested with Python 2.7
import unittest

# Runtime: O(n)

def doesSeqAppear(int_arr):
    #check if input is a list
    if not isinstance(int_arr, list):
        raise TypeError("Input shall be of type array.")

    # check all elements are of type int
    if not all(isinstance(item, int) for item in int_arr) :
        raise ValueError("All elements in array shall be of type int.")

    arr_len = len(int_arr)
    if arr_len < 3: 
        return False

    # Loop through elements
    for i in range(arr_len-2):
        if int_arr[i] == 1 and \
            int_arr[i+1] == 3 and \
            int_arr[i+2] == 4 : 
            return True
    return False


class TestMethodDoesSeqAppear(unittest.TestCase):
    def test_only_single_seq(self):
        #Single time
        assert doesSeqAppear([1,3,4]) == True

    def test_multiple_seq(self):
        #multiple
        assert doesSeqAppear([2,2,1,3,4,2,1,3,4]) == True


    def test_neg_seq(self):
        #multiple
        assert doesSeqAppear([9,-1,1,3,4,-4,4]) == True

    def test_only_empty_seq(self):
        #empty
        assert doesSeqAppear([]) == False
    def test_only_single_elem_seq(self):
        #Single element
        assert doesSeqAppear([1]) == False

    def test_input_is_none(self):
        self.assertRaises(TypeError, doesSeqAppear, None)

    def test_raises_type_error(self):
        self.assertRaises(TypeError, doesSeqAppear, "string")

    def test_raises_value_error(self):
        self.assertRaises(ValueError, doesSeqAppear, [1,2,'a', 'b'])

if __name__ == '__main__':
    unittest.main()

#

Hướng dẫn python check if list contains sequence - python kiểm tra xem danh sách có chứa chuỗi không

200_success

Phù bằng vàng 143K2222 gold badges185 silver badges469 bronze badges

Hỏi ngày 14 tháng 12 năm 2016 lúc 13:33Dec 14, 2016 at 13:33

\ $ \ endgroup \ $

11

\ $ \ beingroup \ $

Gần đây tôi đã nộp đơn xin là một lập trình viên Python nhưng đã bị từ chối.

Đây là vấn đề:

Viết mã Python để kiểm tra xem một mảng có trình tự không (1,3,4)

Giả sử họ đang tìm kiếm các lập trình viên Python chuyên gia, tôi có thể làm gì tốt hơn?

# Tested with Python 2.7
import unittest

# Runtime: O(n)

def doesSeqAppear(int_arr):
    #check if input is a list
    if not isinstance(int_arr, list):
        raise TypeError("Input shall be of type array.")

    # check all elements are of type int
    if not all(isinstance(item, int) for item in int_arr) :
        raise ValueError("All elements in array shall be of type int.")

    arr_len = len(int_arr)
    if arr_len < 3: 
        return False

    # Loop through elements
    for i in range(arr_len-2):
        if int_arr[i] == 1 and \
            int_arr[i+1] == 3 and \
            int_arr[i+2] == 4 : 
            return True
    return False


class TestMethodDoesSeqAppear(unittest.TestCase):
    def test_only_single_seq(self):
        #Single time
        assert doesSeqAppear([1,3,4]) == True

    def test_multiple_seq(self):
        #multiple
        assert doesSeqAppear([2,2,1,3,4,2,1,3,4]) == True


    def test_neg_seq(self):
        #multiple
        assert doesSeqAppear([9,-1,1,3,4,-4,4]) == True

    def test_only_empty_seq(self):
        #empty
        assert doesSeqAppear([]) == False
    def test_only_single_elem_seq(self):
        #Single element
        assert doesSeqAppear([1]) == False

    def test_input_is_none(self):
        self.assertRaises(TypeError, doesSeqAppear, None)

    def test_raises_type_error(self):
        self.assertRaises(TypeError, doesSeqAppear, "string")

    def test_raises_value_error(self):
        self.assertRaises(ValueError, doesSeqAppear, [1,2,'a', 'b'])

if __name__ == '__main__':
    unittest.main()

#

Phù bằng vàng 143K22Dec 14, 2016 at 14:49

Hướng dẫn python check if list contains sequence - python kiểm tra xem danh sách có chứa chuỗi không

200_success200_success200_success

Phù bằng vàng 143K2222 gold badges185 silver badges469 bronze badges

\ $ \ endgroup \ $

4

\ $ \ beingroup \ $

Gần đây tôi đã nộp đơn xin là một lập trình viên Python nhưng đã bị từ chối.

def has_sequence(array, sequence):

Đây là vấn đề:

Viết mã Python để kiểm tra xem một mảng có trình tự không (1,3,4)

import itertools


def lookup(iterable, length):
    tees = itertools.tee(iterable, length)
    for i, t in enumerate(tees):
        for _ in xrange(i):
            next(t, None)
    return itertools.izip(*tees)


def has_sequence(array, sequence):
    # Convert to tuple for easy testing later
    sequence = tuple(sequence)
    return any(group == sequence for group in lookup(array, len(sequence)))

Giả sử họ đang tìm kiếm các lập trình viên Python chuyên gia, tôi có thể làm gì tốt hơn?

  • # Tested with Python 2.7
    import unittest
    
    # Runtime: O(n)
    
    def doesSeqAppear(int_arr):
        #check if input is a list
        if not isinstance(int_arr, list):
            raise TypeError("Input shall be of type array.")
    
        # check all elements are of type int
        if not all(isinstance(item, int) for item in int_arr) :
            raise ValueError("All elements in array shall be of type int.")
    
        arr_len = len(int_arr)
        if arr_len < 3: 
            return False
    
        # Loop through elements
        for i in range(arr_len-2):
            if int_arr[i] == 1 and \
                int_arr[i+1] == 3 and \
                int_arr[i+2] == 4 : 
                return True
        return False
    
    
    class TestMethodDoesSeqAppear(unittest.TestCase):
        def test_only_single_seq(self):
            #Single time
            assert doesSeqAppear([1,3,4]) == True
    
        def test_multiple_seq(self):
            #multiple
            assert doesSeqAppear([2,2,1,3,4,2,1,3,4]) == True
    
    
        def test_neg_seq(self):
            #multiple
            assert doesSeqAppear([9,-1,1,3,4,-4,4]) == True
    
        def test_only_empty_seq(self):
            #empty
            assert doesSeqAppear([]) == False
        def test_only_single_elem_seq(self):
            #Single element
            assert doesSeqAppear([1]) == False
    
        def test_input_is_none(self):
            self.assertRaises(TypeError, doesSeqAppear, None)
    
        def test_raises_type_error(self):
            self.assertRaises(TypeError, doesSeqAppear, "string")
    
        def test_raises_value_error(self):
            self.assertRaises(ValueError, doesSeqAppear, [1,2,'a', 'b'])
    
    if __name__ == '__main__':
        unittest.main()
    
    #
    
  • Phù bằng vàng 143K22
  • Hỏi ngày 14 tháng 12 năm 2016 lúc 13:33
  • Bởi PEP 8,
    [1,2,3,4] or [2,3,4,5] or [3,4,5,6].
    
    8 nên là
    [1,2,3,4] or [2,3,4,5] or [3,4,5,6].
    
    9. Mặc dù vậy, bạn đã sử dụng đúng quy ước đặt tên cho các bài kiểm tra đơn vị của bạn. Cá nhân, tôi sẽ thích
    L[i] == l1 [i],  L[i]== l2 [i],  L[i]== l3 [i]
    
    0.

Bài kiểm tra

L[i] == l1 [i],  L[i]== l2 [i],  L[i]== l3 [i]
1 của bạn là thừa và do đó nên được loại bỏ. Đừng viết một trường hợp đặc biệt khi trường hợp thông thường hoạt động chính xác và nhanh chóng.Dec 14, 2016 at 15:03

Hướng dẫn python check if list contains sequence - python kiểm tra xem danh sách có chứa chuỗi không

\ $ \ endgroup \ $

1

\ $ \ beingroup \ $

Gần đây tôi đã nộp đơn xin là một lập trình viên Python nhưng đã bị từ chối.

[1,2,3,4] or [2,3,4,5] or [3,4,5,6].
0

Đây là vấn đề:

[1,2,3,4] or [2,3,4,5] or [3,4,5,6].
1

Viết mã Python để kiểm tra xem một mảng có trình tự không (1,3,4)

Giả sử họ đang tìm kiếm các lập trình viên Python chuyên gia, tôi có thể làm gì tốt hơn?

[1,2,3,4] or [2,3,4,5] or [3,4,5,6].
2

# Tested with Python 2.7
import unittest

# Runtime: O(n)

def doesSeqAppear(int_arr):
    #check if input is a list
    if not isinstance(int_arr, list):
        raise TypeError("Input shall be of type array.")

    # check all elements are of type int
    if not all(isinstance(item, int) for item in int_arr) :
        raise ValueError("All elements in array shall be of type int.")

    arr_len = len(int_arr)
    if arr_len < 3: 
        return False

    # Loop through elements
    for i in range(arr_len-2):
        if int_arr[i] == 1 and \
            int_arr[i+1] == 3 and \
            int_arr[i+2] == 4 : 
            return True
    return False


class TestMethodDoesSeqAppear(unittest.TestCase):
    def test_only_single_seq(self):
        #Single time
        assert doesSeqAppear([1,3,4]) == True

    def test_multiple_seq(self):
        #multiple
        assert doesSeqAppear([2,2,1,3,4,2,1,3,4]) == True


    def test_neg_seq(self):
        #multiple
        assert doesSeqAppear([9,-1,1,3,4,-4,4]) == True

    def test_only_empty_seq(self):
        #empty
        assert doesSeqAppear([]) == False
    def test_only_single_elem_seq(self):
        #Single element
        assert doesSeqAppear([1]) == False

    def test_input_is_none(self):
        self.assertRaises(TypeError, doesSeqAppear, None)

    def test_raises_type_error(self):
        self.assertRaises(TypeError, doesSeqAppear, "string")

    def test_raises_value_error(self):
        self.assertRaises(ValueError, doesSeqAppear, [1,2,'a', 'b'])

if __name__ == '__main__':
    unittest.main()

#

Phù bằng vàng 143K22

Hỏi ngày 14 tháng 12 năm 2016 lúc 13:33Dec 15, 2016 at 2:20

Bởi PEP 8,

[1,2,3,4] or [2,3,4,5] or [3,4,5,6].
8 nên là
[1,2,3,4] or [2,3,4,5] or [3,4,5,6].
9. Mặc dù vậy, bạn đã sử dụng đúng quy ước đặt tên cho các bài kiểm tra đơn vị của bạn. Cá nhân, tôi sẽ thích
L[i] == l1 [i],  L[i]== l2 [i],  L[i]== l3 [i]
0.Drew

Bài kiểm tra

L[i] == l1 [i],  L[i]== l2 [i],  L[i]== l3 [i]
1 của bạn là thừa và do đó nên được loại bỏ. Đừng viết một trường hợp đặc biệt khi trường hợp thông thường hoạt động chính xác và nhanh chóng.2 bronze badges

\ $ \ endgroup \ $

4

\ $ \ beingroup \ $

Kiểm tra L[i] == l1 [i], L[i]== l2 [i], L[i]== l3 [i] 2 của bạn không được chỉ định trong vấn đề và do đó có hại. Câu hỏi không nói rằng L[i] == l1 [i], L[i]== l2 [i], L[i]== l3 [i] 3 sẽ trả lại L[i] == l1 [i], L[i]== l2 [i], L[i]== l3 [i] 4, cũng không nói rằng nó sẽ thất bại với một ngoại lệ. Trên thực tế, theo cách giải thích của tôi, nó chứa chuỗi ma thuật và do đó sẽ trả về L[i] == l1 [i], L[i]== l2 [i], L[i]== l3 [i] 5. Trong mọi trường hợp, bạn đã lãng phí một lần lặp hoàn chỉnh của danh sách chỉ để thực hiện kiểm tra mà không được yêu cầu.

Kiểm tra

L[i] == l1 [i],  L[i]== l2 [i],  L[i]== l3 [i]
6 là không pythonic, vì việc gõ vịt là tiêu chuẩn trong Python. Trong mọi trường hợp, mã có thể sẽ thất bại một cách tự nhiên nếu nó không phải là một danh sách.you were over thinking the problem.

[1,2,3,4] or [2,3,4,5] or [3,4,5,6].
3

Sau khi cắt tất cả số dư thừa đó, bạn cũng nên bỏ bình luận

L[i] == l1 [i],  L[i]== l2 [i],  L[i]== l3 [i]
7.

[1,2,3,4] or [2,3,4,5] or [3,4,5,6].
4

Đã trả lời ngày 14 tháng 12 năm 2016 lúc 14:49

Theo định nghĩa vấn đề, tôi sẽ mong đợi một hàm Thas có thể kiểm tra bất kỳ chuỗi nào trong một mảng. Không nhất thiết là

L[i] == l1 [i],  L[i]== l2 [i],  L[i]== l3 [i]
8 được đưa ra làm ví dụ. Trong trường hợp này, trình tự cũng phải là một tham số của hàm, đưa ra chữ ký:


Kiểm tra xem mảng có chứa chuỗi không (1,3,4)

[1,2,3,4] or [2,3,4,5] or [3,4,5,6].
5

Đã trả lời ngày 15 tháng 12 năm 2016 lúc 6:42Dec 15, 2016 at 6:42

Hướng dẫn python check if list contains sequence - python kiểm tra xem danh sách có chứa chuỗi không

smac89smac89smac89

1.47510 Huy hiệu bạc23 Huy hiệu Đồng10 silver badges23 bronze badges

\ $ \ endgroup \ $

\ $ \ beingroup \ $

KIS[S]

[1,2,3,4] or [2,3,4,5] or [3,4,5,6].
6

Chúng tôi không thể biết tại sao người phỏng vấn của bạn từ chối ứng dụng của bạn, nhưng những loại câu hỏi này thường là điểm bắt đầu cho cuộc trò chuyện-không phải là điểm cuối của sản phẩm.Nếu bạn viết mã đơn giản nhất, đơn giản nhất bạn có thể, bạn và người phỏng vấn của bạn sau đó có thể nói về những thứ như mở rộng, khái quát hóa và hiệu suất.

Người phỏng vấn của bạn biết rằng yêu cầu bạn thay đổi giao diện chức năng của bạn có vấn đề hơn vì bạn cũng sẽ phải thay đổi tất cả các bài kiểm tra đơn vị [chưa được mở cho] của bạn.Điều này làm chậm quá trình và có thể khiến người phỏng vấn lo lắng rằng bạn sẽ gây ô nhiễm cơ sở mã của họ với rất nhiều mã giòn.

Đã trả lời ngày 14 tháng 12 năm 2016 lúc 18:25Dec 14, 2016 at 18:25

brian_obrian_obrian_o

8395 Huy hiệu bạc9 Huy hiệu Đồng5 silver badges9 bronze badges

\ $ \ endgroup \ $

2