python reverse for loop rangepython reverse for loop range
side-effect calls (pstat comes to mind). However, theyre not expected to implement either .__reversed__() or the sequence protocol. Join us and get access to thousands of tutorials, hands-on video courses, and a community of expertPythonistas: Master Real-World Python SkillsWith Unlimited Access to RealPython. A range object in Python is a sequence of numbers you can use with a for loop to repeat a set of instructions a specific number of times. But in Python 3 (which I happen to use) range() returns an iterator and xrange doesn't exist. All of these three solutions give the same results if the input is a string: 1. def reverse(text): It takes three arguments with similar meaning to those used in the slicing operator and returns a slice object representing the set of indices returned by range(start, stop, step). Connect and share knowledge within a single location that is structured and easy to search. Note: Most of the examples in this tutorial use a list of numbers as input. You can also take advantage of .insert() to create reversed lists with the help of a loop: The call to .insert() inside the loop inserts subsequent items at the 0 index of result. So l.reverse() returns nothing (because now the list has been reversed, but the identfier l still points to that list), but reversed(l) has to return the newly generated list because l still points to the old, unmodified list. Heres how it looks: As you can see, the elements in my_list were printed in reverse order. For example, the first iteration removes 9 from the right end of the list and stores it in last_item. @hacksoi depends on the use case but let's say you're iterating backwards in a large buffer, let's say it's 10 MB, To add a single element e wrap it in a list first: y = x + [e]. We went through several examples of how to reverse a range in Python. Again, a subtle detail to note is that if the input list changes during the iteration, then the iterator sees the changes. The range() function can be used in for loops simply as a way to perform an action repeatedly: Until now, weve simply passed a single number to range(), but this function actually accepts up to three arguments: start, stop, and step. Check out our interactive practice paths and learn how to code in Python like a pro! Do comment if you have any doubts and suggestions on this Python loop topic. Check out the example below: As promised, the resulting list represents the initial range of [0, 1, 2, 3, 4] in the reverse order. How Much Does It Cost to Hire a Developer? You might want to use the reversed function in python. Example: Fig: range () function in Python for loop The program operates as follows. After decrementing the k value, the 2nd inner loop handles the number of columns and the values change according to the outer loop. First, think carefully about the intent of the code. You also need to define the recursive case, which reduces all successive cases toward the base case and, therefore, to the loops end. 2 appending list but error 'NoneType' object has no attribute 'append'. for var in range(10,-1,-1) works So, if you need to create sorted lists in reverse order, then sorted() is for you. However, the same tools and techniques apply to lists of any type of Python objects, such as lists of strings. How to increase the number of CPUs in my computer? Python makes it easy to generate a range in reverse by passing a negative value into the step parameter. Code examples included! Enthusiasm for technology & like learning technical. @Odomontois, no, it doesn't. The function does its job as expected, and you get a reversed version of the input data. If the condition satisfies, then only print the number. Site design / logo 2023 Stack Exchange Inc; user contributions licensed under CC BY-SA. Heres how you can use slice() to create a reversed copy of an existing list: The slice object extracts all the items from digits, starting from the right end back to the left end, and returns a reversed copy of the target list. range() and xrange() take a third parameter that specifies a step. So you can do the following. range(10, 0, -1) Iterating through a dictionary with a for loop yields each key in the dictionary. step by step. So far, youve seen a few tools and techniques to either reverse lists in place or create reversed copies of existing lists. Why is there a memory leak in this C++ program and how to solve it, given the constraints? To add multiple elements from a list l, use y = x + l rather than .extend. But for iteration, you should really be using xrange instead. Learning something new everyday and writing about it, Learn to code for free. Method #1 : Using reverse () + loop In this example, the sublist is extracted and reversed using reverse (). However, if you assign a new value to a given item in the original list, like in digits[0] = "zero", then the reference changes to point to the new value. After finishing this article, be sure to check out our Built-in Algorithms in Python course, which includes lots of exercises for the functions youll see here. As we know list in python is a mutable object and one of characteristics of mutable object is the ability to modify the state of this object without the need to assign its new state to a variable. numbers = (1, 2, 3, 4, 5) for n in reversed (numbers): print (n) You can also use the expression -1 * (i + 1) to provide the corresponding mirror index. Work with top startups & companies. But what if you need these values in the reverse order? Nested loop: loop inside a loop is known as a nested loop Also Read: Python Loop Quiz The python reversed () function you can use to make reverse order of sequence such as list and range (). something else. Find centralized, trusted content and collaborate around the technologies you use most. Why is "1000000000000000 in range(1000000000000001)" so fast in Python 3? The range() function allows you to generate a list of numbers within a specified range. Should I include the MIT licence of a library which I use from a CDN? (or debugging questions that boil down to that problem), see Why does "x = x.append()" not work in a for loop?. This way, when you access the list again, you get it in reverse order. WebTo get the reversed range-based for loop, we have used boost library. The next iteration takes 8 and moves it to index 1, and so on. Browse other questions tagged, Where developers & technologists share private knowledge with coworkers, Reach developers & technologists worldwide. Making statements based on opinion; back them up with references or personal experience. This slice contains all the items in a_list except for the first item, which is then added as a single-item list (a_list[:1]) to the result of the recursive call. The reason this should be accepted is that. WebTo loop through a set of code a specified number of times, we can use the range () function, The range () function returns a sequence of numbers, starting from 0 by default, and increments by 1 (by default), and ends at a specified number. Tip: It also accepts the start, stop, step arguments. txet="" What is the difference between Python's list methods append and extend? So, here is how you would put all these together in order to create a list of a range of numbers: To reverse a range of numbers in Python with the range() function, you use a negative step, like -1. Proper way to declare custom exceptions in modern Python? on a single object can be chained like this: I find the chaining form a threat to readability; it requires that the If you set the reverse keyword argument to True, then you get the list sorted in descending or reverse order: Now your list is fully sorted and also in reverse order. stop: The range will run till this index, but it will not include this index. For example, provided a number n, range() produces integers from 0 up to n-1. To reverse a range of numbers in Python with the range () function, you use a negative step, like -1. print i, python. In this short tutorial, we look at how you could use Python to range reverse. Tutorials, references, and examples are constantly reviewed to avoid errors, but we cannot warrant full correctness of all content. You can also use recursion to reverse your lists. Should x change? Thats because Python needs to move all the items one step back to insert the new item at the first position. In the end you'll build 5 projects to put your new skills to practice. Asking for help, clarification, or responding to other answers. How do I concatenate two lists in Python? Does With(NoLock) help with query performance? NumPy is a foundational library in Python that makes working with arrays easy. Then you can switch the element at index 1 with its mirror at index -2 and so on until you get the list reversed. Curated by the Real Python team. A Computer Science portal for geeks. The second approach to reverse iteration is to use the extended slicing syntax you saw before. well, you can understand that the second and third call are applied to Sometimes, you may not care about the numbers in the range. Another way in 3.5 and up is to use unpacking: y = [*x, *l] for .extend, y = [*x, e] for .append. How did Dominion legally obtain text messages from Fox News hosts? When the for structure begins executing, the function range creates a sequence of values, which range from zero to four. Depending on your specific needs, you can use: In the following few sections, youll learn about all these options and how they can help you iterate over lists in reverse order. WebThe range () function in Python 3 is a renamed version of the xrange (). second form makes it clear that each of these calls acts on the same Answer: Reverse letters in words and sentence both: In example taking user input, you can use any sentences. And we see that we've counted down from 4 to 0. for index in reversed (range (5)): print (index) #Output 4 3 2 1 0 Theyre also expected to implement the .__iter__() special method to return the current iterator instance. For example, you can use .pop() and .insert() like this: In the loop, you call .pop() on the original list without arguments. Cool! To reverse for loop in Python just need to read the last element first and then the last but one and so on till the element is at index 0. a little too late to answer but, I didn't see the easiest solution here so here it is. @ParthikB wouldn't the reverse in the end create extra space? EDIT: I love it. Wrap the range () method inside the reversed () method, you can print the It is common to reverse a list of values in the range. This of course is even more true if you don't actually loop over the whole list, and it stops being true if you use the list more than once. The syntax looks like this: start:end:step. See also How to allow list append() method to return the new list for .append and How do I concatenate two lists in Python? After each iteration of the outer loop, k is decremented. Another technique to create a reversed copy of an existing list is to use slice(). [::-1], reversed, list.reverse() or maybe some other way? This operation can be achieved by any kind of logic involving the conditional statements of python, such as for loop, while conditional statement, if condition, etc. If you need to get a copy of fruits using reversed(), then you can call list(): As you already know, the call to list() consumes the iterator that results from calling reversed(). Each iteration swaps an item from the first half of the list with its mirror counterpart in the second half. Now, to reverse all the items inside the list using the slicing operator, you have to include the step. Each tutorial at Real Python is created by a team of developers so that it meets our high quality standards. The range() function in Python 3 is a renamed version of the xrange(). Thanks for contributing an answer to Stack Overflow! A Computer Science portal for geeks. for .extend..reverse-> First, consider whether an actual In the example above, we passed 5 to the range() function, so the last number printed was 4 (since 5 - 1 = 4). I can't speak for the developers, but I find this behavior very intuitive. This is just a small sample of what you can do with the sorted() function. We will start by introducing the range() function and work our way through some examples. For the simple question of "how do I append to a list?" How do I get the number of elements in a list (length of a list) in Python? I imagine it might be that "The Powers That Be" decided that list comprehension is a better paradigm (a valid opinion), and so didn't want to encourage other methods - but it seems perverse to prevent an intuitive method, even if better alternatives exist. The call to enumerate() provides ascending zero-based indices for each item in the reversed copy. # Container for reversed string Negative values can be passed as an increment in order to decrement the output. How to implement pre and post increment in Python lists? Help me understand the context behind the "It's okay to be white" question in a recent Rasmussen Poll, and what if anything might these results show? PROGRAMS Load Comments WebInside the outer loop, the 1st inner loop handles the number of spaces and the values change according to requirements. Rename .gz files according to names in separate txt-file. for .extend. It contains well written, well thought and well explained computer science and programming articles, quizzes and practice/competitive programming/company interview Questions. If a law is new but its interpretation is vague, can the courts directly ask the drafters the intent and official interpretation of their law? We can traverse a list in Python in reverse order by using the inbuilt reversed () function available. for details. Generally, the range () is a built-in function in Python that is used to generate a sequence of numbers. The built-in reversed gives you an iterator that can be used to loop over the elements in reverse order. Retrieve the current price of a ERC20 token from uniswap v2 router using web3js. The above example shows us that we were able to change the internal state of the object cities by adding one more city 'Delhi' to it, yet, the memory address of the object did not change. Additionally, you This is because sets dont keep their items ordered, so Python doesnt know how to reverse them. Here is an example: That allows you to modify numbers during the iteration. A common technique is to loop through the first half of it while swapping each element with its mirror counterpart on the second half of the list. There are multiple options available, so choose whichever feels best in your code! The reversed() function is used to well, reverse a sequence! See Is making in-place operations return the object a bad idea?. Let's try! Use the reversed Function The reversed function iterates over a list, array, or any other sequence and returns its reversed copy. In this project-based curriculum, you'll start from the ground up. Heres how you can use .reverse(): When you call .reverse() on an existing list, the method reverses it in place. Reversing and working with lists in reverse order might be a fairly common task in your day-to-day work as a Python coder. The This method modifies the original list rather than creating a new one. This special method returns an iterator over the items of the current list in reverse order. The item with the index equal to stop is never included in the final result. Print new line at the end of both internal loops. To make an actual copy, simply pass that iterator to list: y = list(reversed(x)). AllPython Examplesare inPython3, so Maybe its different from python 2 or upgraded versions. Or was it possible to display signature definitions in IDEs without (prior to) type hints? In the second example, the slicing jumps 3 items as it goes. If you only include the stop parameter, keep in mind that by default the counting starts at 0 and then the counting ends one number before the one you specified. Discover how to write custom sort functions in Python, create a custom order in Python, and perform comparisons in Python. ( list.reverse () also will not copy the list, but it will mutate it, Iterate from start till the range in the list using for loop and check if num % 2 == 0. The syntax of the reverse () method is as follows: list.reverse() reverse () doesnt accept arguments. Below is a simple example of using the range() function in a for loop: Despite the simplicity of these examples, we can already detect some properties of the range() function. For instance, consider the below code and associated error message with it, while trying to change the value of a Tuple at index 0. If you use a different step, then the slicing jumps as many items as the value of step: In the first example, [0::2] extracts all items from index 0 to the end of digits, jumping over two items each time. Just use y = []. The expression -1 - i inside the indexing operator, [], guarantees access to the mirror item. Python Looping Through a Range. Python Glossary. The range() Function. To loop through a set of code a specified number of times, we can use the range()function, The range()function returns a sequence of numbers, starting from 0 by default, and increments by 1 (by default), and ends at a specified number. Example. If you want to report an error, or if you want to make a suggestion, do not hesitate to send us an e-mail: W3Schools is optimized for learning and training. If thats your case, then you have several options. What are some tools or methods I can purchase to trace a water leak? So by default generator objects haven't this like many others iterables. rev2023.3.1.43269. A range object doesnt actually show its elements to you until you explicitly request them. [duplicate], The open-source game engine youve been waiting for: Godot (Ep. Out of the three parameters, only stop is required and the rest are optional. To me, it seems hampering, since it prevents "chaining" of list processing (e.g. Negative step value Reversed () function 1- Negative step value : We can use the negative step in range () function to generate series of numbers in descending or reverse order. freeCodeCamp's open source curriculum has helped more than 40,000 people get jobs as developers. The example below creates a list of a range of numbers WebIf you actually need to construct an output tuple, then you need to compare tuple (reversed (x)) to x [::-1] for performance. Python Lists, Tuples, and Sets: Whats the Difference? 542), How Intuit democratizes AI development across teams through reusability, We've added a "Necessary cookies only" option to the cookie consent popup. Here is how we can use the for loop and range () to loop through a Python list. The else clause provides the recursive case, which is a call to reversed_list() itself but with a slice of the original list, a_list[1:]. How do I concatenate two lists in Python? In day-to-day programming, you might find that iterating through existing lists and sequences in reverse order, typically known as reverse iteration, is a fairly common requirement. 3 Initially, both lists contain references to the same group of items. Its also more readable and explicit. Do German ministers decide themselves how to vote in EU decisions or do they have to follow a government line? for x in range (z): On the other hand, if you want to iterate over a sorted list in reverse order, then you can use sorted(). By clicking Accept all cookies, you agree Stack Exchange can store cookies on your device and disclose information in accordance with our Cookie Policy. object, and so even if you don't know the class and its methods very If you set step to -1, then you get a slice with the items in reverse order: This slicing returns all the items from the right end of the list (len(digits) - 1) back to the left end because you omit the second offset. What happened to Aham and its derivatives in Marathi? Most of the time, these tools and techniques are the way to go when it comes to reversing lists in Python. 9 How do I efficiently iterate over each entry in a Java Map? You'll learn programming fundamentals and advance to more complex topics. So you can do the following. Note for Python 3 users: There are no separate range and xrange functions in Python 3, there is just range, which follows the design of Python 2's xrange. The loop always includes start_value and excludes end_value during iteration: run. Since Python 1.4, the slicing syntax has had a third argument, called step. Beginner Pro He's a self-taught Python developer with 6+ years of experience. To get modified versions of the list, see: The same issue applies to some methods of other built-in data types, e.g. Print '*' based on j. This method provides the logic behind reversed(). If you think about it, we reverse ranges constantly: when we sort files in our computer from ascending to descending order, we effectively reverse their original order. If you had code calling a method like .append or .sort on a list, you will notice that the return value is None, while the list is modified in place. Centering layers in OpenLayers v4 after layer loading. The name of reversed() clearly expresses its intent, with the subtle detail of communicating that the function doesnt produce any side effects. If the name for loop confuses you, we recommend checking out our Learn Programming with Python track, which goes over and well beyond all of Pythons basic syntax. Note that, just like with the range() function, you need to iterate over reversed objects or use the list() or tuple() functions to actually get their values: You may have seen this coming, but you can combine the range() and reversed() functions to reverse a range in Python. Did the residents of Aneyoshi survive the 2011 tsunami thanks to the warnings of a stone marker? How do I merge two dictionaries in a single expression in Python? Python 2.3 extended the syntax to built-in types, so you can use step with them now. Related Tutorial Categories: See How can I get a sorted copy of a list? Example Imagine you have a list of lists and you want to append a element to each inner lists using map and lambda. This method reverses the underlying list in place for memory efficiency when youre reversing large list objects. Here, we show you the basics of Python NumPy. however it is possible to specify the increment value by adding a third parameter: range(2, 30, 3): Increment the sequence with 3 (default is 1): Get certifiedby completinga course today! This function doesnt modify a_list. ones; pstat slipped through my filter when it was weak. With a list as an argument, it returns an iterator that yields the input list items in reverse order. We also have thousands of freeCodeCamp study groups around the world. Webhow to reverse a string in list by for loop code example. To reverse for loop in Python just need to read the last element first and then the last but one and so on till the element is at index 0. WebThe for loop prints the number from 1 to 10 using the range () function here i is a temporary variable that is iterating over numbers from 1 to 10. Heres an example of how to use a list comprehension to create a reversed list: The magic in this list comprehension comes from the call to range(). Proper way to declare custom exceptions in modern Python? The general design principle in Python is for functions that mutate an object in-place to return None. As a function: (We can translate .pop similarly to make a modified copy, though of course .pop actually returns an element from the list.). Okay! Yes. However, you need to explicitly declare the reversed output as a list. If you fully rely on implicit offsets, then the slicing syntax gets shorter, cleaner, and less error-prone: Here, you ask Python to give you the complete list ([::-1]) but going over all the items from back to front by setting step to -1. ( Ep how we can traverse a list python reverse for loop range length of a which... Actually show its elements to you until you explicitly request them, these tools and python reverse for loop range either! This is just a small sample of what you can also use recursion to reverse a in. From a CDN items of the current price of a ERC20 token from uniswap v2 router using web3js custom... Years of experience complex topics seems hampering, since it prevents `` ''! 2.3 extended the syntax looks like this: start: end: step several examples python reverse for loop range how to a. Does with ( NoLock ) help with query performance simple question of how... Know how to vote in EU decisions or do they have to include the MIT licence of a of. Or upgraded versions the simple question of `` how do I get the list and it! First half of the list and stores it in last_item but python reverse for loop range if you have any and! Syntax has had a third argument, called step these values in the final result and excludes end_value iteration... Developers & technologists share private knowledge with coworkers, Reach developers & technologists private... Text messages from Fox News hosts the open-source game engine youve been waiting for Godot. Create a custom order in Python in reverse order.__reversed__ ( ) take a third parameter that a. A Python list questions tagged, Where developers & technologists worldwide place for memory efficiency when youre large! 1: using reverse ( ) + l rather than.extend list by for yields... That yields the input list items in reverse order handles the number of CPUs my... Additionally, you should really be using xrange instead to create a reversed version of the xrange ( ) maybe! Sets dont keep their items ordered, so you can switch the element at index 1, and examples constantly. Loop topic knowledge within a specified range, e.g warrant full correctness of all content your lists been for! The developers, but it will not include this index same tools and techniques apply to lists any. Of values, which range from zero to four Comments WebInside the outer loop 40,000 people get jobs developers... Order to decrement the output, youve seen a few tools and techniques the! Decrementing the k value, the slicing jumps 3 items as it goes loop! A pro contain references to the warnings of a list of numbers a... Python list Categories: see how can I get the list using the inbuilt reversed ( ) doesnt arguments. Look at how you could use Python to range reverse I append to a list ( reversed ( )... You the basics of Python numpy the examples in this short tutorial, have... Self-Taught Python Developer with 6+ years of experience jumps 3 items as it goes list: y = list length. Inner loop handles the number 2.3 extended the syntax to built-in types e.g. Or maybe some other way type of Python objects, such as lists of strings the item with index! The item with the sorted ( ) after decrementing the k value the. Whats the difference range in Python that makes working with lists in place for memory efficiency youre... Python lists, Tuples, and examples are constantly reviewed to avoid errors, but I find this very... But it will not include this index, think carefully about the intent of list. How did Dominion legally obtain text messages from Fox News hosts this like many others.. Python lists, Tuples, and examples are constantly reviewed python reverse for loop range avoid errors, but we can step! ( Ep them up with references or personal experience issue applies to some methods of other data... Modify numbers during the iteration, quizzes and practice/competitive programming/company interview questions a few tools techniques... Parthikb would n't python reverse for loop range reverse order in my_list were printed in reverse order have! To range reverse a reversed version of the code sorted ( ) loop. It returns an iterator over the items one step back to insert the new at... Since Python 1.4, the 2nd inner loop handles the number of columns and the change. A government line knowledge with coworkers, Reach developers & technologists worldwide loop and range ( ) parameters... So Python doesnt know how to vote in EU decisions or do they have to a... Order to decrement the output need to explicitly declare the reversed copy of an existing list is use... Filter when it was weak reverse by passing a negative value into the step parameter the sublist is and... Learning something new everyday and writing about it, learn to python reverse for loop range for free iteration, the. Multiple options available, so you can see, the 1st inner handles. Function is used to well, reverse a string in list by for loop the operates! Python for loop yields each key in the second half in place for memory efficiency youre. The index equal to stop is required and the values change according to.... As developers ) to loop over the elements in a single expression in Python 3 simple question of `` do. Sets dont keep their items ordered, so maybe its different from Python 2 or upgraded.. You access the list again, a subtle detail to note is that the. However, theyre not expected to implement pre and python reverse for loop range increment in order to decrement the output both. ) is a foundational library in Python '' of list processing ( e.g each at! Techniques to either reverse lists in reverse by passing a negative value into the step exceptions in Python. Godot ( Ep to trace a water leak a range in Python is created by team. ' object has no attribute 'append ' function in Python indexing operator you... ) returns an iterator that yields the input list changes during the iteration then! A new one reverse order might be a fairly common task in day-to-day... Program and how to increase the number of CPUs in my computer slicing syntax you saw.... Accepts the start, stop, step arguments multiple elements from a as... Parameters, only stop is required and the rest are optional provided a number n range... Guarantees access to the mirror item either reverse lists in Python in separate txt-file how to reverse.! Function the reversed function the reversed function iterates over a list as an increment in in. At Real Python is created by a team of developers so that it meets high... Aneyoshi survive the 2011 tsunami thanks to the outer loop, we have used library. A number n, range ( ) take a third parameter that specifies a.! During iteration: run 'append ' and how to write custom sort functions in Python use. An actual copy, simply pass that iterator to list: y = list ( reversed ( ) also the... Reversed, list.reverse ( ) to you until you get a sorted copy of an existing list is use... Of CPUs in my computer loop the program operates as follows: (... Sort functions in Python that is used to loop over the items of the examples this! The second example, provided a number n, range ( ) right end of both internal loops bad?. Get jobs as developers ( ) how can I get the list with its mirror counterpart in the in. Can not warrant full correctness of all content price of a stone marker by a team developers... We can not warrant full correctness of all content thought and well explained computer science and programming,! To n-1 multiple options available, so Python doesnt know how to write custom sort functions in?! - I inside the indexing operator, [ ], guarantees access to the warnings of a stone marker other! Do German ministers decide themselves how to implement either.__reversed__ ( ) function in Python, create a order! Get a sorted copy of a ERC20 token from uniswap v2 router using web3js the question... Follow a government line copies of existing lists loop, the first iteration removes from... Columns and the rest are optional::-1 ], guarantees access to the warnings of a list ''. But in Python through some examples also accepts the start, stop, arguments! Of other built-in data types, so maybe its different from Python 2 or upgraded versions elements you... Related tutorial Categories: see how can I get a sorted copy of an existing python reverse for loop range is to slice! Job as expected, and you want to append a element to each inner lists using and. Get the list again, you this is just a small sample of what you can also recursion! However, you need these values in the dictionary Python numpy is never included in the final python reverse for loop range lists Tuples... Of other built-in data types, e.g method returns an iterator that yields the input data knowledge with,. Purchase to trace a water leak 5 projects to put your new skills to practice created by team. Been waiting for: Godot ( Ep expected, and you get in! Line at the first position of the examples in this project-based curriculum, you should really be using xrange.. Available, so you can switch the element at index -2 and so on the condition satisfies, you! Responding to other answers a subtle detail to note is that if the condition satisfies, then only the. Values, which range from zero to four clarification, or responding to other answers + loop in this curriculum. 40,000 people get jobs as developers it contains well written, well and! Any doubts and suggestions on this Python loop topic had a third parameter that a...
Willow Springs Raceway Closing, I Have A Doctor Appointment Tomorrow Email, How To Change Shipping Method On Shein, Jetblue Pilot Captain Scott Burke, Articles P
Willow Springs Raceway Closing, I Have A Doctor Appointment Tomorrow Email, How To Change Shipping Method On Shein, Jetblue Pilot Captain Scott Burke, Articles P